提交后 MVC5 在文本框中丢失值

MVC5 Lost value in Textbox after Submit

我想澄清一件事关于 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);
        }

剃刀视图

@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' 文本框中输入的值并没有被保留。我可以在我的控制器中捕获两个文本框值。但是回发后,'LastName' 文本框中的值丢失了。使用 HTMLHelper 创建的文本框虽然没有丢失值。

我是做错了什么还是应该是这样的?如果我想保留提交的值,是否必须在 MVC5 的 RazorViews 中使用 HtmlHelpers?

您没有将第二个输入绑定到 LastName 的值,只是设置了它的 name 属性。如果您检查生成的 html,您会注意到第一个具有 value 属性,而第二个没有。

您需要像对 FirstName 所做的那样使用 EditorFor()(或 TextBoxFor()),它会生成正确的 value 属性(以及其他 data-val-* 使用客户端验证所必需的属性)。

旁注:您也可以使用

<input name="LastName" ..... value="@Model.LastName"` />

但是这不会考虑 ModelState

什么是 "postback"?听起来您正试图从 WebForms 的角度考虑这一点,其中服务器端控件在幕后有很多管道做事。

简而言之,您的视图中没有任何代码实际将值放入 input。当使用 HTML 助手时,虽然生成的客户端标记是相同的(因此,下一个控制器操作的 post 是相同的),但不同的是 HTML 助手会将控件绑定到提供给视图的模型。

HTML 本身不会那样做。但是,您可以手动执行此操作:

<input value="@Model.LastName" class="form-control text-box single-line" id="LastName" name="LastName" style="width: 120px;" type="text">       
       ^--- right here

您需要在模型中添加文本框,并在视图 index.cshtml 中添加 link 文本框,如下所示: m = m.Variable_name_from_your_model

查看此站点: https://mvcstepbystep.wordpress.com/how-to-update-a-c-mvc-textbox-from-jquery/