MVC传递模型来查看

Ice*_*cet 7 c# asp.net-mvc asp.net-mvc-4

我的Index.cshtml

@model ReportGenerator.WebUI.Models.ReportViewModel
@Html.TextBoxFor(m => m.report.FileName, new { @class = "form-control", id = "FileName" })
Run Code Online (Sandbox Code Playgroud)

我的控制器

public ActionResult Index(ReportViewModel model)
{
    ...some stuff
    model.report = new Report();
    model.report.FileName = "INDEX";
    return View(model);
}

public ActionResult fillFields(ReportViewModel _model)
{
    ...some stuff
    _model.report = new Report();
    _model.report.FileName = "FILL";
    return View("Index", _model);
}
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序时,该TextBox Text属性设置为"INDEX".此外,当我点击一个调用fillFields控制器动作的按钮时,TextBox仍然显示"INDEX",它不会变为"FILL".

我究竟做错了什么?为什么不想工作?

Mih*_*ale 1

@StephenMuecke 在上面的评论中正确回答了这个问题。

\n\n

你没有做错任何事。您的fillFields()方法有一个参数 ReportViewModel,因此在初始化该方法时,其值将添加到 ModelState。当您返回视图时,您的TextBoxFor()方法使用来自(而不是模型属性)的值ModelState来设置文本框的值。其原因解释如下。正确的方法是遵循 PRG 模式 \xe2\x80\x93

\n