如何从View Model访问文本框?我的页面返回了一个订单号列表,我希望在页面顶部有一个搜索文本框。但是,似乎我只能从foreach语句中访问文本框。
简单视图模型
public class ViewOrdersByCustomerIDViewModel
{
[Display(Name="Order Number / Order ID")]
public int OrderID { get; set; }
[DisplayName("Product Name")]
public string ProductName { get; set; }
[DisplayName("Order Date")]
public DateTime ?OrderDate { get; set; }
public string txtBoxOrderNumber { get; set; }
}
我认为这样的事情会起作用,但显然不是......
@model IEnumerable<something.something.ViewOrdersByCustomerIDViewModel>
@using (Html.BeginForm("OrderNumberSearch", "Order", FormMethod.Post))
{
<strong>Enter Order Number / Order ID</strong>
@Html.TextBoxFor(m=>m.txtBoxOrderNumber)
<input type="submit" name="submit" value="Go" />
}
任何帮助都将不胜感激。
谢谢!
修改
文本框的目的是过滤/搜索显示的订单号。我只需要一个文本框,不希望循环创建几个搜索框。如果我的逻辑关闭并且有更好的方法来实现这一点,请告诉我。我只是觉得在模型中包含所有属性会更清晰,但情况可能并非如此。
答案 0 :(得分:2)
以下列方式制作ViewModel -
public class OrdersByCustomerIDViewModel
{
[Display(Name="Order Number / Order ID")]
public int OrderID { get; set; }
[DisplayName("Product Name")]
public string ProductName { get; set; }
[DisplayName("Order Date")]
public DateTime ?OrderDate { get; set; }
}
public class OrderSearchViewModel
{
public List<OrdersByCustomerIDViewModel> Orders { get; set;}
public string txtBoxOrderNumber { get; set; }
}
在你的视图中 -
@model OrderSearchViewModel
@using (Html.BeginForm("OrderNumberSearch", "Order", FormMethod.Post))
{
<strong>Enter Order Number / Order ID</strong>
@Html.TextBoxFor(m=>m.txtBoxOrderNumber)
<input type="submit" name="submit" value="Go" />
}
<!-- Here use the list to display results -->
foreach(var item in Model.Orders)
{
@Html.LabelFor(m => item.ProductName)
}