Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 要查看的MVC传递模型_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 要查看的MVC传递模型

C# 要查看的MVC传递模型,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,My Index.cshtml @model ReportGenerator.WebUI.Models.ReportViewModel @Html.TextBoxFor(m => m.report.FileName, new { @class = "form-control", id = "FileName" }) 我的控制器 public ActionResult Index(ReportViewModel model) { ...some stuff model.re

My Index.cshtml

@model ReportGenerator.WebUI.Models.ReportViewModel
@Html.TextBoxFor(m => m.report.FileName, new { @class = "form-control", id = "FileName" })
我的控制器

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);
}
运行应用程序时,
TextBox
Text
属性设置为“INDEX”。另外,当我单击调用
fillFields
控制器操作的按钮时,
TextBox
仍然显示“INDEX”,它没有变为“FILL”


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

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


你没有做错什么。您的
fillFields()
方法有一个参数ReportViewModel,因此当方法初始化时,它的值会添加到ModelState中。返回视图时,您的
TextBoxFor()
方法使用
ModelState
中的值(而不是模型属性)来设置文本框的值。解释了原因。正确的方法是遵循PRG模式–

你没有做错任何事。您的
fillFields()
方法有一个参数
ReportViewModel
,因此当方法初始化时,它的值会添加到
ModelState
。返回视图时,您的
TextBoxFor()
方法使用
ModelState
中的值(而不是模型属性)来设置文本框的值。解释了原因。正确的方法是遵循PRG模式,不要使用
ModelState.Clear()
。遵循PRG模式并重定向!您的
Index()
不应具有参数
ReportViewModel
(它可能会由于多种原因而失败,并会创建一个难看的查询字符串)。现在还不清楚您的意图是什么,但最好的猜测是它应该是
public ActionResult Index(string fileName)
,然后初始化您的模型并设置
fileName
属性。在POST方法中,使用
return RedirectToAction(“Index”,new{fileName=“FILL”})是,但是(1)如果对象包含复杂对象或集合的属性,它将失败(2)您很容易超过查询字符串限制并引发异常(3)它创建了一个丑陋的查询字符串。Mihir Kale添加了一个答案。你可以接受:)