2017-06-12 25 views
0

我试图传递一个字符串(表示已被单击的按钮)和表单的内容,但是当代码到达actionresult时,vModel对象始终为空。任何人都可以帮我解决它吗?无法传递表单内容以查看动作模型

下面是代码片段:

var form = $('#Application'); 
    if (form.valid()) { 
      var data = { 
       'submitButton': "Submit your application", 
       'vModel': JSON.stringify(form.serialize()) 
      }; 

      $("#submit-application-dialog").dialog({ 
       resizable: false, 
       height: "auto", 
       width: 400, 
       modal: true, 
       buttons: { 
        "Submit application": function() { 
         $.ajax({ 
          url: form.attr('action'), 
          type: 'POST', 
          data: data, 
          success: $("#submit-application-dialog").dialog("close") 
         }); 
        }, 
        Cancel: function() { 
         $(this).dialog("close"); 
        } 
       } 
      }); 
    } 

而且的ActionResult:

[HttpPost] 
    public ActionResult Application(string submitButton, ApplicationViewModel vModel) 
    { 
    ... 

任何帮助将不胜感激。

谢谢。

回答

0

我已经做了一个类似的事情,通过将值附加到查询字符串像下面,而不是有一个控制器操作参数。

var myData = $('#frmMyForm').serialize(); 
myData = myData + "&ButtonClicked=" + "Button1";    

      $.ajax({ 
       type: "POST", 
       url: "@Url.Action("MyActionName", "MyControllerName")", 
       data: myData, 
       contentType: 'application/x-www-form-urlencoded; charset=UTF-8', 
       success: function(data) { 
       \\Do stuff here if needed; 
       } 

然后在控制器中,我从表单集合中提取值。

var buttonName = Request.Form["ButtonClicked"]; 

有可能是一个更好的,或者我们应该说这样做的不太笨重的方式,但这个工作对我来说。

希望帮助

你好,这里居然是一个更好的解决方案,我认为昨晚的。为您的视图模型添加一个属性,也许称为“ButtonClicked”。

然后在JQuery中,像下面那样捕获提交的点击事件并相应地设置按钮名称。

<script> 
    $(document).ready(function() { 

     $(document).on("click", "#btnSubmitButton", function() { 
      $("#ButtonClicked").val("ThisButton"); 
     }); 

    }); 
</script> 

然后绑定到发布的模型。 谢谢

+0

谢谢你,这真的帮助我解决方案。所以我在ActionResult中保留了原来的两个属性,但是使用了'var myData ...'代码,现在它正确地传递了所有内容:)。 – Diz19791

+0

@ Diz19791 - 嗨..我有一个更好的解决方案..我已经编辑了答案。 TA – Wheels73