在IENumerable视图上从ViewModel访问TextBox

时间:2015-02-23 11:42:30

标签: asp.net asp.net-mvc

如何从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" />
}

任何帮助都将不胜感激。

谢谢!

修改

文本框的目的是过滤/搜索显示的订单号。我只需要一个文本框,不希望循环创建几个搜索框。如果我的逻辑关闭并且有更好的方法来实现这一点,请告诉我。我只是觉得在模型中包含所有属性会更清晰,但情况可能并非如此。

1 个答案:

答案 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)    
 }