2009-09-24 23 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

相關問題