Asp.net mvc 2 如何绑定到asp.net mvc 2中不在模型中的类?

Asp.net mvc 2 如何绑定到asp.net mvc 2中不在模型中的类?,asp.net-mvc-2,binding,Asp.net Mvc 2,Binding,通常,当我设计表单时,我期望的数据是页面的viewmodel的一部分,我可以将该类放入控制器方法中,绑定工作正常 但是,我在母版页的部分视图中添加了一个表单,因此它并不特定于任何一个viewmodel。我试图确保表单字段的ID与通常自动生成的ID匹配,但在我的控制器方法中,对象值始终为null 以下是我的母版页部分视图中的表单片段: <tr> <td >Current password:</td>

通常,当我设计表单时,我期望的数据是页面的viewmodel的一部分,我可以将该类放入控制器方法中,绑定工作正常

但是,我在母版页的部分视图中添加了一个表单,因此它并不特定于任何一个viewmodel。我试图确保表单字段的ID与通常自动生成的ID匹配,但在我的控制器方法中,对象值始终为null

以下是我的母版页部分视图中的表单片段:

            <tr>
                <td >Current password:</td>
                <td><%= Html.Password("PasswordChange.OriginalPassword", "", new RouteValueDictionary { { "class", "required remote" } })%></td>
            </tr>            
            <tr>
                <td >New password:</td>
                <td><%= Html.Password("PasswordChange.NewPassword", "", new RouteValueDictionary { { "class", "required remote" } })%></td>
            </tr>
我点击了该方法,但PasswordChange.OriginalPassword和PasswordChange.NewPassword始终为空


我想有一些简单的方法可以做到这一点,但我想不出来。

去掉前缀:

<tr>
    <td>Current password:</td>
    <td><%= Html.Password("OriginalPassword", "", new RouteValueDictionary { { "class", "required remote" } })%></td>
</tr>            
<tr>
    <td >New password:</td>
    <td><%= Html.Password("NewPassword", "", new RouteValueDictionary { { "class", "required remote" } })%></td>
</tr>
顺便说一下,您也可以考虑使用子动作:

public class PasswordChangeController: Controller
{
    [ChildActionOnly]
    public ActionResult Index()
    {
        var model = new PasswordChange();
        return PartialView(model);
    }
}
然后在母版页内,而不是呈现部分,呈现子操作:

<% Html.RenderAction("Index", "PasswordChange"); %>

当然,现在您将有一个强类型的
~/Views/PasswordChange/Index.ascx
部分,您可以在其中生成表单并使用强类型版本的帮助程序


有关子操作的更多信息,请参阅Phil Haack关于此主题的文章。

我的PasswordChange类的成员未设置为公共

@%$#$^#%&%


谢谢,达林,但我想我已经找到了根本问题-(见我的答案。这是OP要求的答案。他找到了另一个答案这一事实并没有改变这一点。@DaveA我不确定你的观点是什么,但我很高兴对这个答案投赞成票。我的发现很简单,我做的每件事都是可行的,除了我的财产是私有的。前缀似乎不是ob斯泰克。我会读一读有关儿童行为的书,谢谢。@PC1好的,你说得对。也许我今天对很多糟糕的问题表达了我的厌恶。
public class PasswordChangeController: Controller
{
    [ChildActionOnly]
    public ActionResult Index()
    {
        var model = new PasswordChange();
        return PartialView(model);
    }
}
<% Html.RenderAction("Index", "PasswordChange"); %>
public class PasswordChange
    {
        public OriginalPassword { get; set; }
        public NewPassword { get; set; }
    }
public class PasswordChange
    {
        public string OriginalPassword { get; set; }
        public string NewPassword { get; set; }
    }