Asp.net mvc 4 编辑器UI小部件未将输入传递到模型
我是“ASP.NET MVC的剑道UI”新手,目前正在使用编辑器UI小部件从数据库获取数据并保存对数据库的更改。编辑器正确显示控制器返回的模型数据 但是,在对编辑器进行更改后,编辑器中的内容不会传递给控制器的HttpPost方法,因此会显示所需的验证消息 关于编辑器为什么不将输入传递给基础模型,有什么想法吗 下面是一些代码:Asp.net mvc 4 编辑器UI小部件未将输入传递到模型,asp.net-mvc-4,kendo-ui,Asp.net Mvc 4,Kendo Ui,我是“ASP.NET MVC的剑道UI”新手,目前正在使用编辑器UI小部件从数据库获取数据并保存对数据库的更改。编辑器正确显示控制器返回的模型数据 但是,在对编辑器进行更改后,编辑器中的内容不会传递给控制器的HttpPost方法,因此会显示所需的验证消息 关于编辑器为什么不将输入传递给基础模型,有什么想法吗 下面是一些代码: **@* Create Customer View *@** @model KendoTest.Models.Customer @{ Layout = "~/Vi
**@* Create Customer View *@**
@model KendoTest.Models.Customer
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<div class="editor-label">
@Html.LabelFor(model => model.CustomerName)
@Html.EditorFor(model => model.CustomerName)
@Html.ValidationMessageFor(model => model.CustomerName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Notes)
@(Html.Kendo().EditorFor(model => model.Notes).Name("NotesEditor").HtmlAttributes(new { style = "width:400px" }))
@Html.ValidationMessageFor(model => model.Notes)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
**// Customer Controller**
public class CustomerController : Controller
{
private KendoTestDbContext db = new KendoTestDbContext();
//
// GET: /Customer/Create
[HttpGet]
public ActionResult Create()
{
return View();
}
//
// POST: /Customer/Create
[HttpPost]
public ActionResult Create(Customer customer)
{
if (ModelState.IsValid)
{
db.Customers.Add(customer);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(customer);
}
}
****创建客户视图*@**
@model KendoTest.Models.Customer
@{
Layout=“~/Views/Shared/_Layout.cshtml”;
}
@使用(Html.BeginForm()){
@Html.ValidationSummary(true)
@LabelFor(model=>model.CustomerName)
@EditorFor(model=>model.CustomerName)
@Html.ValidationMessageFor(model=>model.CustomerName)
@LabelFor(model=>model.Notes)
@(Html.Kendo().EditorFor(model=>model.Notes).Name(“NotesEditor”).HtmlAttributes(新的{style=“width:400px”}))
@Html.ValidationMessageFor(model=>model.Notes)
}
**//客户控制员**
公共类CustomerController:控制器
{
私有KendoTestDbContext db=new KendoTestDbContext();
//
//获取:/Customer/Create
[HttpGet]
公共操作结果创建()
{
返回视图();
}
//
//POST:/Customer/Create
[HttpPost]
公共行动结果创建(客户)
{
if(ModelState.IsValid)
{
db.Customers.Add(客户);
db.SaveChanges();
返回操作(“索引”);
}
返回视图(客户);
}
}
以下是Telerik团队Daniel的解决方案:
如果属性名称与编辑器名称不匹配,则无法将编辑器中的值传递给post操作。编辑器名称用于textarea名称,如果名称不同,ModelBinder将无法关联该值。您可以使用EditorFor helper并跳过Name方法来生成正确的名称:
@Html.Kendo().EditorFor(model => model.PropertyName)
分享一些视图的代码,分享一些控制器的代码,分享通过fiddler或firebug/devtools发布的内容。这个回答对我很有帮助。非常感谢。我没有意识到编辑器的对象名称应该是相同的