Asp.net mvc 2 ASP.NET MVC 2.0在模型绑定和字典方面有困难

Asp.net mvc 2 ASP.NET MVC 2.0在模型绑定和字典方面有困难,asp.net-mvc-2,Asp.net Mvc 2,使用下面的模型,我希望当按下Submit按钮时,Edit方法将触发,并且model参数将具有调整后的值。但它不断返回一个包含所有空值的类实例。就好像从来没有发生过模型绑定一样 class Trait { string Name { get; set; } // other properties } class DesignViewModel { Dictionary<Trait, int> Allocation { get; set; } } HTML 顶层页面 局部视

使用下面的模型,我希望当按下Submit按钮时,Edit方法将触发,并且
model
参数将具有调整后的值。但它不断返回一个包含所有空值的类实例。就好像从来没有发生过模型绑定一样

class Trait
{
 string Name { get; set; }
 // other properties
}

class DesignViewModel
{
 Dictionary<Trait, int> Allocation { get; set; }
}
HTML 顶层页面

局部视图



您需要将[HttpPost]添加到您的编辑方法中,以便在POST请求期间触发该方法。

从技术上讲,她不必这样做。如果不添加任何动词修饰,则不会限制任何内容(这是
[HttpPost]
的要点),因此默认情况下,它将接受
所有
HTTP动词。我想问题出在
Html.TextBox
绑定中。我有帖子。我只是忘了把它放在示例中。@Stacey:在您的示例中,Edit方法是启动的(但它附带了一个空的DesignViewModel)还是根本没有启动?@Stacey:这可能只是示例代码中的一个输入错误,但是Trait类的属性是公共的吗?我认为这个问题比在中看起来更棘手。这可能是一个很好的开始:您可以显示
吗?好的,所以您使用的是局部视图。
不应该是
Html.RenderPartial(“设计”,模型)
?RenderAction将控制器操作的输出直接显示到视图中。顶层页面应输出部分视图。部分视图位于不同的控制器中。我注意到了一件事(可能不是问题所在),但是您将文本框设置为只读(带有@readonly html属性)。那你怎么能“编辑”模型呢?此视图的作用是什么?通过jQuery使用控件名及其.val()属性编辑该值。
public ActionResult Create()
{
 var model = new DesignViewModel();

 // retrieve traits from database
 foreach(var trait in Repository.Traits)
   model.Allocation.Add(trait, 0);
 return View(model);
}
[HttpPost]
public ActionResult Edit(DesignViewModel model)
{
 // nothing works yet, so I don't have a lot of code here... 
}
<%@ Page Title="" Language="C#" MasterPageFile="~/Areas/Setup/Views/Shared/Setup.master"
    Inherits="System.Web.Mvc.ViewPage<OtherModel>" %>
    <% Html.RenderAction("Design", "Test"); %>
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DesignViewModel>" %>

    <% using (Html.BeginForm("Edit", "Test", FormMethod.Post ) ) {%>
     <div id="eq">
      <% foreach (var trait in Model.Allocations) { %>
      <div style="margin: 15px;">
       <%: trait.Key.Name %>
       <br />
       <span class="slider"></span>
       <%: Html.TextBox(trait.Key.Name, trait.Value,  new { @class = "spent" , @readonly =  "readonly" })%>
      </div>
      <% } %>
     </div>
     <p>
      <input type="submit" value="Submit" />
     </p>
    <% } %>