Asp.net mvc 绑定、前缀和生成的HTML

Asp.net mvc 绑定、前缀和生成的HTML,asp.net-mvc,data-binding,model,prefix,Asp.net Mvc,Data Binding,Model,Prefix,MVC新手问题重新绑定。假设我有两个强类型的部分动作,它们恰好有一个同名的模型属性,并且呈现在同一个包含页面中,即: Class Friend {string Name {get; set ;} DateTime DOB {get; set ;}} Class Foe {string Name {get; set ;} string ReasonForDislike {get; set ;}} 两个部分都有一行: <%= Html.TextBoxFor(model => model

MVC新手问题重新绑定。假设我有两个强类型的部分动作,它们恰好有一个同名的模型属性,并且呈现在同一个包含页面中,即:

Class Friend {string Name {get; set ;} DateTime DOB {get; set ;}}
Class Foe {string Name {get; set ;} string ReasonForDislike {get; set ;}}
两个部分都有一行:

<%= Html.TextBoxFor(model => model.Name) %>
我的问题是,两者都将以相同的id呈现在我的包含页面上(当然,由于很多原因都不好)。我知道[Bind]属性允许我添加前缀,从而生成代码:

public ActionResult SaveFriend([Bind(Prefix = “friend”)] Friend friend)
<%= Html.TextBox("friend.Name", Model. Name) %> //Boo, no TextBoxFor :(
public ActionResult SaveFriend([Bind(Prefix=“friend”)]friend)
//Boo,没有文本框用于:(
但这仍然不能解决问题。我几乎可以忍受助手的强类型TextBoxFor的丢失,但我还没有让客户端验证与前缀一起工作: 我试过:

<%= Html.ValidationMessage("friend.Name") %>

…还有我能想到的所有其他变体

我似乎需要模型在两个方向上都知道前缀,但bind仅在映射入站请求时才适用。对我来说,这似乎是一个常见的场景,但我正在努力寻找示例。我缺少什么


提前感谢。

前缀在那里,因此您可以将对象包装在“外部”视图模型中

假设我们有:

public class MyViewModel
{
   public Friend friend;
   public Foe foe;
}
如果将此类用作ViewModel和强类型视图的基础,则强类型文本框将命名为:

friend.Name
foe.Name

然后,您可以使用问题中提到的Prefix属性来消除Friend类和Foe类之间的歧义。

非常感谢,是的,Bind属性仅用于映射请求,我觉得这是错误的,但当时正在抓紧救命稻草!我没有考虑创建包装类来影响渲染。我必须承认,我是为域对象创建冗余包装器只是为了让视图正常工作,但这确实解决了我眼前的问题。如果能够在模型中指定一个应用于请求和响应的前缀,那就太好了。感谢您让我再次运行!很高兴我能帮上忙。仅供参考-您不必创建视图模型,但它在MVC中工作得更好,这迫使您编写更好的代码。问题不在于样式,而在于缺少工具。ViewModel创建不应该是一个劳动密集型的过程,但使用ASP.NET MVC还为时过早(和版本)。。。
friend.Name
foe.Name