我想澄清一下关于MVC5 Razor Views的一件事。
有人告诉我,我不需要在我的剃刀视图中使用HTML帮助程序(@ Html.EditorFor,@ Html.TextBoxFor),它仍然有效。
控制器代码
[HttpPost]
public ActionResult Create(Models.TestObj obj)
{
ViewBag.TestStr = string.Format("You typed: {0} {1}", obj.FirstName, obj.LastName);
return View(obj);
}
Razor View
@using (Html.BeginForm())
{
<div>
@Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control", style = "width: 120px;" } })
<input class="form-control text-box single-line" id="LastName" name="LastName" style="width: 120px;" type="text">
<input type="submit" name="submit" value="Filter" / >
</div>
@ViewBag.TestStr
}
但是当我像上面那样对它进行实际测试时,不会保留在“LastName”文本框中键入的值。我可以在Controller中捕获两个文本框值。但在回发后,丢失了'LastName'文本框中的值。使用HTMLHelper创建的文本框虽然没有丢失。
我做错了什么或它应该是那样的?如果我想保留提交的值,我是否必须在MVC5中的RazorViews中使用HtmlHelpers?
答案 0 :(得分:1)
&#34;回发&#34;?听起来你正试图用WebForms来思考这个问题,因为服务器端控件在幕后有许多管道工作。
简单地说,您的视图中没有代码实际上将值放在input
中。使用HTML帮助程序时,生成的客户端标记是相同的(因此,下一个控制器操作的帖子是相同的),有一点不同的是HTML帮助程序将绑定控件到提供给视图的模型。
HTML本身并没有做到这一点。但是,您可以手动执行此操作:
<input value="@Model.LastName" class="form-control text-box single-line" id="LastName" name="LastName" style="width: 120px;" type="text">
^--- right here
答案 1 :(得分:0)
您没有将第二个输入绑定到LastName
的值,只需设置其name
属性即可。如果你检查你生成的html,你会注意到第一个属性有value
属性,而第二个属性没有。
您需要使用EditorFor()
(或TextBoxFor()
),因为FirstName
生成了正确的value
属性(以及其他data-val-*
属性使用客户端验证所必需的。)
旁注:您也可以使用
<input name="LastName" ..... value="@Model.LastName"` />
然而,这不会考虑ModelState
值
答案 2 :(得分:0)
您需要在模型中添加文本框,并将其链接到视图 index.cshtml 中,如下所示: m = m.Variable_name_from_your_model
看看这个网站: https://mvcstepbystep.wordpress.com/how-to-update-a-c-mvc-textbox-from-jquery/