动态表单的服务器端解决方案

时间:2012-09-12 06:43:30

标签: jquery asp.net-mvc asp.net-mvc-3 forms server-side

我有一组用于提交表单的锚标签

foreach (var item in items)
<a  class="submitform" data-did='<%:Model.DID%>'  data-daid='<%:Model.daID%>' href="#"><%:Model.DisplayText%>
</a>

单击锚点我动态地将表单附加到它并使用数据属性值填充隐藏字段,这是我在表单提交时所需的值

 $(".submitforapproval").click(function (e) {
        e.preventDefault();
        var daid = $(this).data("daid");
        var did = $(this).data("did");

        $("<form/>", { action: "/HOME/PostMethod", method: "POST", id: "temp_form" }).appendTo("body");
        $("<input/>", { class: 'jshiddenInput', type: "hidden", name: "docid", value: did }).appendTo("#temp_form");
        $("<input/>", { class: 'jshiddenInput', type: "hidden", name: "DocAID", value: daid }).appendTo("#temp_form");

        $("#temp_form").submit();


    });

我正在尝试为此开发服务器端解决方案。我认为一种方法是让form环绕每个锚标记,并在每个表单中使用两个隐藏字段而不是data- attributes

1 个答案:

答案 0 :(得分:0)

为什么所有这些javascript都必需?为什么不使用提交按钮的标准HTML表单?从语义上讲,这似乎更正确:

<% foreach (var item in items) { %>
    <% using (Html.BeginForm("PostMethod", "Home", FormMethod.Post)) { %>
        <%= Html.TextBox("docid", Model.DID) %>
        <%= Html.TextBox("docAID", Model.daID) %>

        <button type="submit">
            <%: Model.DisplayText %>
        </button>
    <% } %>
<% } %>

就服务器端方法而言,您可以拥有一个视图模型:

public class DocumentViewModel
{
    public string DocId { get; set; }
    public string DocAId { get; set; }
}

然后您的POST控制器操作将简单地将此视图模型作为参数:

[HttpPost]
public ActionResult PostMethod(DocumentViewModel model)
{
    ...
}