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

Razor 提交后,MVC5在文本框中丢失值,razor,asp.net-mvc-5,html-helper,Razor,Asp.net Mvc 5,Html Helper,我想澄清一件关于MVC5 Razor视图的事情 我被告知我不必在razor视图中使用HTML帮助程序(@HTML.EditorFor,@HTML.TextBoxFor),它仍然可以工作 控制器代码 [HttpPost] public ActionResult Create(Models.TestObj obj) { ViewBag.TestStr = string.Format("You typed: {0} {1}", obj.First

我想澄清一件关于MVC5 Razor视图的事情

我被告知我不必在razor视图中使用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
}
@使用(Html.BeginForm())
{
@EditorFor(model=>model.FirstName,new{htmlAttributes=new{@class=“form control”,style=“width:120px;”}})
@ViewBag.TestStr
}
但当我像上面那样实际测试它时,“LastName”文本框中键入的值不会被保留。我可以在控制器中捕获两个文本框值。但回发后,“LastName”文本框中的值丢失。但是,使用HTMLHelper创建的文本框并没有丢失值


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

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

您需要使用
EditorFor()
(或
TextBoxFor()
)就像您对
FirstName
所做的那样,后者生成正确的
属性(以及使用客户端验证所需的其他
数据val-*
属性)

旁注:您也可以使用

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

但是,这将不考虑
ModelState

什么是“回发”?听起来,您正试图从WebForms的角度来考虑这一点,在WebForms中,服务器端控件有许多管道在幕后进行操作

简单地说,在您的视图中没有实际将值放入该
输入中的代码。当使用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

^---就在这里

您需要在模型中添加文本框,并在view index.cshtml中将其链接如下:
m=m.Variable\u name\u from\u your\u model

查看此网站:

如何将StackOverflow中的代码格式化为您的代码段?或者是自动完成的?您需要使用HtmlHelper。不,说真的,请参考