C# HttpPost创建后填充的字段-使用输入的对象为null
我正在学习ASP.NETMVC5。我创建了一个视图“Create”。但我并没有使用Razor来生成输入字段,而是使用纯html的输入 Create.cshtmlC# HttpPost创建后填充的字段-使用输入的对象为null,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我正在学习ASP.NETMVC5。我创建了一个视图“Create”。但我并没有使用Razor来生成输入字段,而是使用纯html的输入 Create.cshtml @model MyProject.Product <h2>Create Product</h2> <form method="post"> Description: <br /> <input type="text" name="Description" i
@model MyProject.Product
<h2>Create Product</h2>
<form method="post">
Description: <br />
<input type="text" name="Description" id="Description"/> <br />
ValueType: <br />
<input type="text" name="ValueType" id="ValueType"/>
<br />
<input type="submit" name="btSend"/>
</form>
但是我需要在模型中使用一些带有注释的服务器端验证。
因此,我希望发送数据,如果模型无效,则返回创建值。我知道如何放置验证消息。所以,我试过这个:
@model MyProject.Product
<h2>Create Product</h2>
<form method="post">
Description: <br />
<input type="text" name="Description" id="Description" value="@Model.Description"/> <br />
ValueType: <br />
<input type="text" name="ValueType" id="ValueType" value="@Model.ValueType"/>
<br />
<input type="submit" name="btSend"/>
</form>
@model MyProject.Product
创造产品
说明:
ValueType:
如何将纯输入与html绑定到模型
为什么是空值
非常感谢。如果您不想使用基于剃刀的表单方法,您可以将显示验证消息与
Viewbag/ViewData一起使用
[HttpPost]
public ActionResult Create(Product product)
{
if (!ModelState.IsValid)
{
//if you want to get validation message from ModelState itself, you can query from Modelstate :
string message = string.Join(" , ", ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage));
ViewData["ValidationMessage"] = "Validation Message";// you can use above variable message here
return View(product);
}
// your other implementation
}
你的观点应该是这样的:
@model MyProject.Product
<h2>Create Product</h2>
<form method="post">
<div class="error-message">@ViewData["ValidationMessage"]</div>
Description: <br />
<input type="text" name="Description" id="Description" value="@Model.Description"/> <br />
ValueType: <br />
<input type="text" name="ValueType" id="ValueType" value="@Model.ValueType"/>
<br />
<input type="submit" name="btSend"/>
</form>
@model MyProject.Product
创造产品
@ViewData[“ValidationMessage”]
说明:
ValueType:
但是,如果允许的话,我建议您使用基于razor的表单方法。我想您可能会误解razor视图引擎。第2.0页和第3.0页(razor)没有任何方式的数据绑定。它使用html助手模拟它,但这不是本机razor数据绑定。看一看助手()的代码,你会发现他们正在执行你希望的工作。你到底为什么不使用razor?使用@Html.LabelFor()
、@Html.TextBoxFor()
和@Html.ValidationMessageFor()正确生成表单控件
-然后查看它生成的所有html,并将其与您的进行比较,这意味着您没有双向模型绑定,也没有验证,因为我与前端开发人员一起工作,他们为我创建了html。我想知道是否有一种使用输入类型的方法。如何绑定?使用HtmlHelper
方法将为您提供双向模型绑定和验证所需的正确html。而且@Model.Description
是razor代码,所以说你不想使用razor是没有意义的。你的解决方案是使用razor(这就是@ViewData[“ValidationMessage”]
中的@
所指的。是的,但OP也已经在使用一些简单的razor,比如“@Model.Description”和“@Model.ValueType”是的,我知道(正如我在对问题的评论中所指出的那样)。但是你的问题表明,如果你不想使用razor,那么就用razor展示一个解决方案:)我现在已经更正了它,称之为基于razor的表单方法。它是razor,但我喜欢用它来验证消息。我只想保留值。但问题是:如何保留值?
@model MyProject.Product
<h2>Create Product</h2>
<form method="post">
<div class="error-message">@ViewData["ValidationMessage"]</div>
Description: <br />
<input type="text" name="Description" id="Description" value="@Model.Description"/> <br />
ValueType: <br />
<input type="text" name="ValueType" id="ValueType" value="@Model.ValueType"/>
<br />
<input type="submit" name="btSend"/>
</form>