Asp.net mvc 2 ASP.NET MVC 2.0在模型绑定和字典方面有困难
使用下面的模型,我希望当按下Submit按钮时,Edit方法将触发,并且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 顶层页面 局部视
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>
<% } %>