2014-03-26 30 views
1

我遇到了IE和FF的问题;我的应用程序正在使用Google Chrome。ajax调用后,Formcollection输入值在控制器中为空

我将模型绑定到ASP.NET MVC中的视图我在表单(和其他控件)中有一个表行。我用ajax调用来替换表格行的内容。 ajax调用后,如果我按如下所示提交表单,我无法从控制器方法获取表单收集输入。当我在ajax调用之前提交表单时没有问题。

JS代码更新表行的内容:

function reloadCriteriaTable(unitID, criteriaCode, icerikRowSpan, icerikOnay) { 
$.ajax({ 
    type: "GET", 
    url: 'ApproveParts/ReloadCriteria', 
    data: { contentID: $('[name="contentID"]').val(), unitID: unitID, criteriaCode: criteriaCode, selectedValue: $("#validator_" + criteriaCode).val(), icerikRowSpan: icerikRowSpan, icerikOnay: icerikOnay }, 
    cache: false, 
    type: "POST", 
    success: function (data, textStatus, XMLHttpRequest) { 
     $('#tr_' + criteriaCode).replaceWith(data); 
     $('#continueBtn').on('click', function() { 
      $('#form_3').submit(); 
      return false; 
     }); 
    }, 
    error: function (xhr, status, error) { 
     alert(xhr + ' ' + status + " : " + error); 
    } 

}); 
} 

的onClick功能:

$(document).on("click", ".btnSubmitCriteria", function() { 
    $('#form_3').submit(); 
    return false; 
}); 

控制器的方法:

[HttpPost] 
public ActionResult CourseCriteriaApprovment(FormCollection collection) 
{ 

} 
+0

如果它在IE和FF中不起作用,那么您的客户端代码的可能性有点不对。你实际上有'type'在你的js中定义了两次吗?只是一个额外的说明,我不会使用FormCollection,而是一个ViewModel用于模型绑定。 – Justin

+0

感谢您的答案,在我的真实代码中,我只是'后'类型;我粘贴了一个错误的代码块。出于某种原因,我不想在此特定示例中使用Viewmodel。我只想知道为什么表单行更新后我的表单集合是空的,因为如果我没有更新,我在提交之后从控制器中正确地获取表单集合 – user3464177

+0

您是否尝试在表单文章上添加断点以查看内容调试器必须说? – Justin

回答

0

首先,为什么你提到的这两个类型“ GET“和”POST“在你的ajax调用中。仅使用“POST”。

试试这个

$.ajax({ 
    type: 'POST', 
    url: '/ApproveParts/ReloadCriteria', 
    dataType: 'json', 
    contentType: 'application/json', 
    data : return JSON.stringify({ 
      contentID: $('[name="contentID"]').val(), 
      unitID: unitID, 
      criteriaCode: criteriaCode, 
      selectedValue: $("#validator_" + criteriaCode).val(), 
      icerikRowSpan: icerikRowSpan, 
      icerikOnay: icerikOnay 
     }); 
}); 

在你的控制器动作接受一个类来代替的FormCollection。在类中定义的所有属性与您在ajax调用中发送的属性相同。

+1

这是一个很好的答案。谁曾经投下了这个必须是ediot ...我看到了typye:发布并得到在同一时间..我是upvoting这个..mate – Shaz

+1

我不知道它会永远与这样的网址'ApproveParts/ReloadCriteria' ,也许只在主页面上(根级别),尝试在 – webdeveloper

+1

@webdeveloper之前添加额外的'/' – Yasser