2009-09-24 42 views
1

我想重构以避免从视图解析FormCollection,所以我将其更改为在强类型对象中传递。我的表单元素与LinkUpdater对象上的属性名称相同。但是当我在控制器的第一个链接上放置一个断点时,所有的属性都是空的。将asp.net mvc表单元素绑定到复杂对象以发布到控制器

有什么想法或建议吗?

查看:

<%using (Ajax.BeginForm("AddNewLink", "Links", new AjaxOptions { UpdateTargetId = "LinkList", LoadingElementId = "updating", OnSuccess = "done" })) 
    { %> 

<fieldset style="text-align:left"> 
<table> 
<tr><td>Url:</td><td> <input style="width:500px" type="text" name="URL" /></td></tr> 
<tr><td>Description: </td><td><input style="width:400px" type="text" name="Description" /></td></tr> 
<tr><td>Tags: </td><td><input style="width:400px" id="Tags" name="tags" type="text" /></td></tr> 
<tr><td><input type="submit" value="Add Link" name="submit" /></td></tr> 
</table> 
</fieldset> 
    <% } %> 

控制器邮编:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult AddNewLink(LinkUpdater linkUpdater_) 
    { 
     string[] tags = linkUpdater_.Tags.Replace(" ", "").Split(','); 
     linkRepository.AddLink(linkUpdater_.URL, linkUpdater_.Description, tags); 
     ..... 
    } 

LinkUpdater类:

public class LinkUpdater 
{ 
    public string URL; 
    public string Description; 
    public string Tags; 
} 
+0

你可以显示原始POST(来自Fiddler)吗? – 2009-09-24 13:53:02

回答

4

MVC中的模型绑定器绑定到属性,而您使用字段。更改为

public string URL { get; set; } 

顺便说一下,还有一些其他的缺点,就像如果你使用私有组,它会自动跳过绑定了。

0

是否有您不使用强类型HTMLHelpers呈现任何特别的原因,你的输入字段?

<%using (Ajax.BeginForm("AddNewLink", "Links", new AjaxOptions { UpdateTargetId = "LinkList", LoadingElementId = "updating", OnSuccess = "done" })) 
    { %> 
<fieldset style="text-align: left"> 
    <table> 
     <tr> 
      <td> 
       Url: 
      </td> 
      <td> 
       <%=Html.TextBox("URL", Model.URL, new { style = "width:500px;" }) %> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Description: 
      </td> 
      <td> 
       <%=Html.TextBox("Description", Model.Description, new { style = "width:400px;" }) %> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Tags: 
      </td> 
      <td> 
       <%=Html.TextBox("Tags", Model.Tags, new { style = "width:400px;" }) %> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <input type="submit" value="Add Link" name="submit" /> 
      </td> 
     </tr> 
    </table> 
</fieldset> 
<% } %> 

我不确定它会解决您的问题,但它至少在正确的方向迈出了一步。

+0

是的。 。这是因为我发回的数据不是我绑定完整视图的模型。 。也许这是问题。 。整个页面视图绑定到一个更大的对象。这些必须是相同的东西? – leora 2009-09-24 21:44:02

+0

这应该没有什么不同,默认的ModelBinder不关心字段是如何创建的,只是名称和ID匹配绑定对象中的属性。 HTMLHelpers仍然帮助保持代码更加灵活和安全。 queen3的解决方案是否适用于你? – 2009-09-25 15:27:20

相关问题