开发者

Having difficulty with ModelBinding and Dictionary, ASP.NET MVC 2.0

开发者 https://www.devze.com 2023-01-21 01:19 出处:网络
Using the following model, I expect that when the Submit button is hit, the Edit Method to Fire, and the model parameter to have the adjusted values. But it keeps returning an instance of the class wi

Using the following model, I expect that when the Submit button is hit, the Edit Method to Fire, and the model parameter to have the adjusted values. But it keeps returning an instance of the class with all null values. It is as if no model binding ever happens.

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

class DesignViewModel
{
 Dictionary<Trait, int> Allocation { get; set; }
}

Controller

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... 
}

HTML开发者_如何学C

Top Level Page

<%@ Page Title="" Language="C#" MasterPageFile="~/Areas/Setup/Views/Shared/Setup.master"
    Inherits="System.Web.Mvc.ViewPage<OtherModel>" %>
    <% Html.RenderAction("Design", "Test"); %>

Partial View

<%@ 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>
    <% } %>


You need to add [HttpPost] to your Edit method for it to be fired during POST requests.

0

精彩评论

暂无评论...
验证码 换一张
取 消