我正试图在按一下按钮时得到一个身份证明。我的按钮在GridView里面
<asp:GridView runat="server" AutoGenerateColumns="false"
ID="UsersGridView" AllowPaging="true"
CssClass="table table-hover table-striped"
UseAccessibleHeader="true" GridLines="None">
<Columns>
<asp:BoundField DataField="User.FullName" HeaderText="User" />
<asp:BoundField DataField="Book.Title" HeaderText="Book" />
<asp:BoundField DataField="BooksReserved.DateOut" HeaderText="Return Date"
FooterStyle-BackColor="#ff0000" DataFormatString="{0:d}" />
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<asp:LinkButton ID="userProfile" runat="server" OnCommand="userProfile_Command"
CommandArgument='<% Eval("User.Id") %>'
Text="Open User Profile" CssClass="btn btn-success" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>在方法Page_Load后面的代码中,我从3个表中加载了网格视图的数据:
protected void Page_Load(object sender, EventArgs e)
{
// Users Grid
var query = from u in db.Users
join br in db.BooksReserveds on u.Id equals br.UserId
join b in db.Books on br.BookId equals b.Id
where br.DateOut < DateTime.Today
orderby br.DateOut
select new { User = u, BooksReserved = br, Book = b };
UsersGridView.DataSource = query.ToList();
UsersGridView.DataBind(); }在单击按钮时,我试图获得id:
protected void userProfile_Command(object sender, CommandEventArgs e)
{
try
{
int id = Int32.Parse(e.CommandArgument.ToString());
var query = from u in db.Users
where u.Id == id
select u;
} catch(Exception any)
{
Console.WriteLine(any.ToString());
}
}我得到了一个例外:“输入字符串格式不正确。”
有人知道为什么吗?
谢谢
发布于 2017-04-11 23:59:33
你忘了#。语法应该是<%# %>
<asp:LinkButton ID="userProfile" runat="server" OnCommand="userProfile_Command"
CommandArgument='<%# Eval("User.Id") %>'
Text="Open User Profile" CssClass="btn btn-success" />发布于 2017-04-12 00:16:29
在您的Page_Load事件处理程序中,您正在对query变量执行select new操作,使该变量成为一个匿名对象:
// Users Grid
//by using var here and select new this object is anonymous.
var query = from u in db.Users
join br in db.BooksReserveds on u.Id equals br.UserId
join b in db.Books on br.BookId equals b.Id
where br.DateOut < DateTime.Today
orderby br.DateOut
select new { User = u, BooksReserved = br, Book = b };
UsersGridView.DataSource = query.ToList();
UsersGridView.DataBind();您需要一个定义的对象,您可以在Gridview的ItemTemplate中对其进行转换。就像这样:
public class UserGridViewModel
{
public User User { get; set; }
public BooksReserved BooksReserved { get; set; } //sounds like it could be a collection, but I do not know.
public Book Book { get; set; }
}然后,返回到Page_Load UserGrid选择查询:
// Users Grid -- Notice the select new UserGridViewModel()
var query = from u in db.Users
join br in db.BooksReserveds on u.Id equals br.UserId
join b in db.Books on br.BookId equals b.Id
where br.DateOut < DateTime.Today
orderby br.DateOut
select new UserGridViewModel() { User = u, BooksReserved = br, Book = b };然后,在Gridviw中,ItemTemplate本质上是一个命名容器,对于该容器,您需要获得DataItem,它将是一个UserGridViewModel对象(您必须将dataItem转换到模型中)。请参见命令参数的这段代码(还请注意此服务器打开<%#):
CommandArgument='<%# ((UserGridViewModel)Container.DataItem).User.Id %>'您的UserGridViewModel中的任何其他变量都可以在ItemTemplate中以类似的方式访问。
https://stackoverflow.com/questions/43357907
复制相似问题