将asp.net mvc表单元素绑定到复杂对象以发布到控制器

时间:2009-09-24 13:48:28

标签: asp.net-mvc binding

我正在尝试重构以避免从视图中解析FormCollection,所以我将其更改为传入强类型对象。我的表单元素与LinkUpdater对象上的属性名称相同。但是当我在控制器的第一个链接上放置断点时,所有属性都为空。

任何想法或建议?

查看:

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

2 个答案:

答案 0 :(得分:4)

MVC中的模型绑定器绑定到属性,同时使用字段。改为

public string URL { get; set; }

顺便说一下,还有其他一些缺点,比如你使用私人套装,它也会默默地跳过绑定。

答案 1 :(得分: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>
<% } %>

我不确定它会解决你的问题,但这至少是朝着正确方向迈出的一步。