繁体   English   中英

单击MVC中的按钮时如何将模型从视图传递到控制器?

[英]How to pass model from view to controller when click button in MVC?

索引 - 查看

@model SendAFaxWeb.Models.Send
//view start here
<body>
    <div>
        <h2>Test Upload File</h2>
        <form action="@Url.Action("Index", "Home")" id="form" method="post" enctype="multipart/form-data">
            @Html.AntiForgeryToken()
            <div class="form-group">
                <label>Fax Number:</label>
                @Html.TextBoxFor(m => m.Recipients[0].Number)
             </div>

            <div class="form-group">
                <label>Select File:</label>
                <input type="file" name="files" id="file" multiple="multiple" onchange="this.form.submit();" />
            </div>

            <div>
              @if (Model != null)
                 {
                   foreach (var item in Model.Documents)
                    {
                       <li>FileName: @item.Name</li>
                    }
                  }
             </div>
    </form>

    <input type="submit" name="send" value="Send" id="btnSend" />

    </div>
</body>

Javascript - javascript 不起作用

<script type="text/javascript">
    $(document).ready(function () {
     $("#btnSend").click(function () {
        alert("button click");
        e.preventDefault();

        var model = @Html.Raw(Json.Encode(Model))
        $.ajax({
            type: 'post',
            url: '@Url.Action("Send", "Home")',
            data: JSON.stringify({ contact: model }),
            contentType: 'application/json; charset=utf-8',
            dataType: "json",
            success: function (data) {
                alert(data);
            }
        });
        });
    });

</script>

控制器

public ActionResult Send(Send contact)
{
    //some code here
}

我试图通过使用 javascript 将模型传递给控制器​​,但它不起作用。 javascript中的警报也不会弹出。 谁能告诉我代码有什么问题。

您可以使用以下代码进行操作

@model PK.LifeStyles.Web.Models.Reimbursement //model declaration on top

<button type="button" onclick="location.href='@Url.Action("ActionName", "ControllerName",Model)'">

你后面的代码应该是这样的

    public ActionResult Save(Reimbursement data)
    {
      // your  code
    }
   //just some random class
   public class Reimbursement{
         public string Destination { get; set; }
   }

您已经实现了跨源安全性,例如: @Html.AntiForgeryToken() 因此,您必须在AJAX调用中将该值作为参数传递,如下所示。

阿贾克斯:

data:{__RequestVerificationToken:$('[name=__RequestVerificationToken]').val();}

您还必须在控制器中添加属性。

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Send(Send contact)
  @using (Html.BeginForm("actionmethod", "controller", FormMethod.Post, new { }))

您可以在视图中使用它来将数据从视图发送到控制器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM