3

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) %>

以及相关的控制器动作:

public ActionResult SaveFriend(Friend friend)
public ActionResult SaveFoe(Foe foe)

我的问题是两者都会在我的包含页面上呈现相同的 id(当然,由于很多原因很糟糕)。我知道允许我添加前缀的 [Bind] 属性,从而产生代码:

public ActionResult SaveFriend([Bind(Prefix = “friend”)] Friend friend)
<%= Html.TextBox("friend.Name", Model. Name) %> //Boo, no TextBoxFor :(

但这仍然没有削减它。我几乎可以容忍强类型 TextBoxFor 助手的丢失,但我还没有让客户端验证使用前缀:我尝试过:

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

...以及我能想到的所有其他变体。

我似乎需要模型知道两个方向的前缀,但绑定仅在映射入站请求时适用。这似乎(对我来说)是一个常见的场景,但我正在努力寻找那里的例子。我错过了什么!

提前致谢。

4

1 回答 1

2

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

假设我们有:

public class MyViewModel
{
   public Friend friend;
   public Foe foe;
}

如果你使用这个类作为你的 ViewModel 和你的强类型视图的基础,那么你的强类型文本框将被这样命名:

friend.Name
foe.Name

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

于 2010-03-23T01:52:27.267 回答