将视图模型的一部分传递给控制器

Posted

技术标签:

【中文标题】将视图模型的一部分传递给控制器【英文标题】:Passing part of a viewmodel to a controller 【发布时间】:2013-08-15 21:35:52 【问题描述】:

我有一个客户索引页面,它采用 CustomerIndexViewModel 来填充页面,其中包含客户列表、请求所用的时间以及许多其他信息。

我在 CustomerIndexViewModel 中有一个 CustomerSearchArgsModel。

public class CustomerIndexViewModel : BaseIndexViewModel

    public IEnumerable<Customer> Customers get; set; 
    public double RequestTime  get; set; 
    public CustomerSearchArgsModel CustomerSearchArgsModel  get; set; 
    public OtherTypes OtherType get;set;



public class CustomerSearchArgsModel

    public string CustomerID  get; set; 
    public string FirstName  get; set; 
    public string LastName  get; set; 

在我的客户索引页面上,我想要类似的东西 -

@model CustomerIndexViewModel

@
    ViewBag.Title = "Index";


<h2>Index</h2>

@using (html.BeginForm("Index","Customer",FormMethod.Post, new  id="searchSubmit"))

    @Html.LabelFor(model => model.CustomerSearchArgsModel.ConsumerID)
    @Html.EditorFor(model => model.CustomerSearchArgsModel.ConsumerID)
    @Html.LabelFor(model => model.CustomerSearchArgsModel.LastName)
    @Html.EditorFor(model => model.CustomerSearchArgsModel.LastName)
    @Html.LabelFor(model => model.CustomerSearchArgsModel.FirstName)
    @Html.EditorFor(model => model.CustomerSearchArgsModel.FirstName)

    <input type="submit" value="Search" />

我想将输入的值返回到 CustomerSearchArgsModel 中 Customer 控制器上的 Index (POST) 方法。

但我不知道如何返回与页面顶部定义的模型不同的模型。

【问题讨论】:

【参考方案1】:

您可以将“searchSubmit”表单放在局部视图中。然后将 model.CustomerSearchArgsModel 传递给局部视图。确保 model.CustomerSearchArgsModel 不为空;否则,你会得到一个异常。

索引页面

@Html.Partial("_search", model.CustomerSearchArgsModel)

_搜索部分视图

@model CustomerSearchArgsModel
@using (Html.BeginForm("Index","Customer",FormMethod.Post, new  id="searchSubmit"))

    @Html.LabelFor(model => model.ConsumerID)
    @Html.EditorFor(model => model.ConsumerID)
    @Html.LabelFor(model => model.LastName)
    @Html.EditorFor(model => model.LastName)
    @Html.LabelFor(model => model.FirstName)
    @Html.EditorFor(model => model.FirstName)

    <input type="submit" value="Search" />

这种方法的问题是您将在文本框中为 ConsumerID 显示一个 0 值。要解决这个问题,您可以使用 Html.Action 而不是 Html.Partial。

希望这会有所帮助。

【讨论】:

谢谢,整理好了。

以上是关于将视图模型的一部分传递给控制器的主要内容,如果未能解决你的问题,请参考以下文章

在部分视图 MVC5 之间传递视图模型

在 MVC 5 中,如何将表对象数据作为列表传递给控制器​​视图模型?

在viewDidLoad之前编写init方法将模型传递给视图控制器[重复]

将 json 传递给视图模型时保持安全

如何在每个控制器中不重复代码的情况下将模型传递给我的主视图模板?

ASP.NET MVC 视图需要将选定的下拉列表和日历日期传递给模型