Asp.net mvc ASP.NET MVC模型绑定ID不匹配

Asp.net mvc ASP.NET MVC模型绑定ID不匹配,asp.net-mvc,Asp.net Mvc,我在MVC2中有一个视图,其中我编辑了一个“页面”。页面有名称、标题和内容。内容为EditableContent类型,具有宽度、CssClass和列。列是一个列表 在视图中执行此操作时: <%= Html.TextBoxFor(m => m.Name) %> m.Name)%%> 它输出以下HTML: <input type="text" value="About Page" name="Name" id="Name"> 当我发布到ContentContr

我在MVC2中有一个视图,其中我编辑了一个“页面”。页面有名称、标题和内容。内容为EditableContent类型,具有宽度、CssClass和列。列是一个列表

在视图中执行此操作时:

<%= Html.TextBoxFor(m => m.Name) %>
m.Name)%%>
它输出以下HTML:

<input type="text" value="About Page" name="Name" id="Name">

当我发布到ContentController中的编辑操作时:

/// <summary>
/// Edits the specified form.
/// </summary>
/// <param name="item">The content page.</param>
/// <returns>ActionResult for edit</returns>
[HttpPost]
public ActionResult Edit(Page item)
{
    if (ModelState.IsValid)
    {
    }

    return View(item);
}
//
///编辑指定的表单。
/// 
///内容页。
///用于编辑的操作结果
[HttpPost]
公共操作结果编辑(页面项)
{
if(ModelState.IsValid)
{
}
返回视图(项目);
}
它无法将Name属性绑定到item.Name。在Request.Form中查找值,我看到Name参数

如果手动渲染文本框,请使用以下命令:

<%= Html.TextBox("item.Name", Model.Name)%>

该值完全绑定到控制器操作中的页面实例


我在这里犯了什么根本性的错误吗?

我不知道,您是否尝试在操作中输入页面参数的完整名称空间?可能存在命名冲突。

必须为模型名称使用前缀。这将隔离不同模型的输入。 行动范例

public ActionResult Edit([Bind(Prefix="Page")]Page item)
{…}

渲染输入时

<%= Html.TextBox("Page.Name", Model.Name)%>


很抱歉,现在不知道如何使用带有lambda表达式的helper执行此操作。

如果操作方法参数为named item,DefaultModelBinder将查找item.name、item.title、item.content.width等。如果在请求中找不到任何*item.*,它将忽略item前缀并返回空前缀,只查找name,标题、内容、宽度等


请求中的其他内容很可能被称为item(或*item.**),这导致此回退逻辑不会发生。如果要强制执行回退逻辑,请使用[Bind(Prefix=”“)]属性参数,该属性表示“是的,我知道此参数已命名为item,但假设其名称实际上是“”。”

我现在知道了。那没用。我想知道是否应该在MvcContrib中使用CastleBinder。请尝试在视图中使用。谢谢