2

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

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.

4

1 回答 1

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)
{
    ...
}
于 2012-09-12T08:19:22.590 回答