2015-02-23 67 views
0

如何从我的View Model访问文本框?我的页面正在返回订单号列表,我希望在页面顶部有一个搜索文本框。但是,似乎我只能从foreach语句访问文本框。从IENumerable View的ViewModel访问TextBox

简单视图模型

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" /> 
} 

任何帮助,将不胜感激。

谢谢!

EDIT

文本框的目的是过滤/搜索所显示的顺序的数字。我只需要一个文本框,并且不希望通过创建多个搜索框来循环。如果我的逻辑关闭,并有更好的方法来完成这一点,请让我知道。我只是认为在模型中拥有所有属性会更清洁,但情况可能并非如此。

+0

作为你的模型是'IEnumerable',你需要遍历这一点,使用TextBoxFor获得文本框。 – ramiramilu 2015-02-23 11:50:10

+0

你为什么要在模型中使用它?如果你想搜索,你可以在你的控制器操作中使用它并将其用于搜索。请更新你真正想要做的事情。 – BabyDuck 2015-02-23 11:50:51

+0

不清楚你想要做什么。该表单的目的是获得与“OrderNumber”相匹配的过滤订单清单吗? – 2015-02-23 11:50:52

回答

2

让您的ViewModels在下面的方式 -

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)  
} 
+0

谢谢。当然,我不得不改变控制器,但它运作良好。 – Anonymous 2015-02-23 12:22:46