提交

时间:2016-02-01 13:22:09

标签: razor asp.net-mvc-5 html-helper

我想澄清一下关于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?

3 个答案:

答案 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/