我正在学习ASP.NET MVC 5.我创建了一个View“Create”。但是我没有使用Razor来生成输入字段,我使用纯HTML的输入。
Create.cshtml
@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>
我的控制器:
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(Product product)
{
if (ModelState.IsValid)
{
db.Product.Add(product);
db.SaveChanges();
return RedirectToAction("Index");
}
else
{
return View(product);
}
It works fine. I can create new products.
但我需要在模型中使用一些带有Annotations的服务器端验证。 所以,我想发送数据,如果模型无效,请返回使用值创建。我知道如何放置验证消息。所以,我试过这个:
@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>
如何将纯输入与html绑定到模型?
为什么空值?
非常感谢。
答案 0 :(得分:0)
如果您不想使用razor based form approach
,则可以将显示验证消息与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>
但是,如果您被允许,我建议您使用razor based form approach
。
答案 1 :(得分:0)
我想你可能会误解剃刀视图引擎。 Pages 2.0和3.0(razor)没有以任何方式进行数据绑定。它使用html帮助器模拟它,但这不是本机剃刀数据绑定。看看助手背后的代码(https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/Html/DefaultEditorTemplates.cs),你会看到他们正在执行你希望的工作。