Asp.net mvc ASP.NET MVC操作无法识别post json数据

Asp.net mvc ASP.NET MVC操作无法识别post json数据,asp.net-mvc,json,forms,model-binding,Asp.net Mvc,Json,Forms,Model Binding,我有一个表单,其中有3个字段要传递给控制器操作: <form role="form" class="form-inline" name="frmUserData" id="frmUserData"> <div class="form-group"> <label for="txtlitm">Item Code:</label> <input type="text" class="form-control

我有一个表单,其中有3个字段要传递给控制器操作:

<form role="form" class="form-inline" name="frmUserData" id="frmUserData">
    <div class="form-group">
        <label for="txtlitm">Item Code:</label>
        <input type="text" class="form-control" id="txtlitm" name="txtlitm">
    </div>
    <div class="form-group">
        <label for="txtmcu">Branch Plant (filter):</label>
        <input type="text" class="form-control" id="txtmcu" name="txtmcu">
    </div>
    <div class="form-group">
        <label for="txtlocn">Location (filter):</label>
        <input type="text" class="form-control" id="txtlocn" name='txtlocn'>
    </div>
    <button type="button" class="btn btn-default" id="btnGO">Search</button>
</form>
第2版:

$.ajax({
    type: "POST",
    data: JSON.stringify($('#frmUserData').serializeArray()),
    contentType: "application/json; charset=utf-8",
    url: action,
    dataType: 'html',
    success: function(data) {
        $(dataContainer).html(data);
        $(what).hide();
    }
$.ajax({
    type: "POST",
    data: '{"frmData":' + JSON.stringify($('#frmUserData').serializeArray()) + '}',
    contentType: "application/json; charset=utf-8",
    url: action,
    dataType: 'html',
    success: function(data) {
        $(dataContainer).html(data);
        $(what).hide();
    }
public PartialViewResult GetAvailability(FormModel frmData)
{
    var vm = Bll.GetAvailabilityWithHolds(frmData.txtlitm, frmData.txtmcu, frmData.txtlocn);
    return PartialView(new GetAvailabilityModel{Availability = vm});
}
public class FormModel
{
    public string txtlitm { get; set; }
    public string txtmcu { get; set; }
    public string txtlocn { get; set; }
}
我的MVC行动:

$.ajax({
    type: "POST",
    data: JSON.stringify($('#frmUserData').serializeArray()),
    contentType: "application/json; charset=utf-8",
    url: action,
    dataType: 'html',
    success: function(data) {
        $(dataContainer).html(data);
        $(what).hide();
    }
$.ajax({
    type: "POST",
    data: '{"frmData":' + JSON.stringify($('#frmUserData').serializeArray()) + '}',
    contentType: "application/json; charset=utf-8",
    url: action,
    dataType: 'html',
    success: function(data) {
        $(dataContainer).html(data);
        $(what).hide();
    }
public PartialViewResult GetAvailability(FormModel frmData)
{
    var vm = Bll.GetAvailabilityWithHolds(frmData.txtlitm, frmData.txtmcu, frmData.txtlocn);
    return PartialView(new GetAvailabilityModel{Availability = vm});
}
public class FormModel
{
    public string txtlitm { get; set; }
    public string txtmcu { get; set; }
    public string txtlocn { get; set; }
}
我的表单类:

$.ajax({
    type: "POST",
    data: JSON.stringify($('#frmUserData').serializeArray()),
    contentType: "application/json; charset=utf-8",
    url: action,
    dataType: 'html',
    success: function(data) {
        $(dataContainer).html(data);
        $(what).hide();
    }
$.ajax({
    type: "POST",
    data: '{"frmData":' + JSON.stringify($('#frmUserData').serializeArray()) + '}',
    contentType: "application/json; charset=utf-8",
    url: action,
    dataType: 'html',
    success: function(data) {
        $(dataContainer).html(data);
        $(what).hide();
    }
public PartialViewResult GetAvailability(FormModel frmData)
{
    var vm = Bll.GetAvailabilityWithHolds(frmData.txtlitm, frmData.txtmcu, frmData.txtlocn);
    return PartialView(new GetAvailabilityModel{Availability = vm});
}
public class FormModel
{
    public string txtlitm { get; set; }
    public string txtmcu { get; set; }
    public string txtlocn { get; set; }
}
无论我做什么,我在控制器操作中都会得到空值


我做错了什么?

你试过这个吗?您不需要使用Json,可以使用标准表单编码

$.ajax({
type: "POST",
data: $('#frmUserData').serialize(),
url: action,
dataType: 'html',
success: function(data) {
    $(dataContainer).html(data);
    $(what).hide();
}
我无法测试这些修复程序中的任何一个,但是尝试此方法来修复您的原始解决方案怎么样:

尝试1

$.ajax({
    type: "POST",
    data: '{"frmData":' + JSON.stringify($('#frmUserData').serializeArray()[0]) + '}',
    contentType: "application/json; charset=utf-8",
    url: action,
    dataType: 'html',
    success: function(data) {
        $(dataContainer).html(data);
       $(what).hide();
}
尝试2

$.ajax({
    type: "POST",
    data: JSON.stringify($('#frmUserData').serializeArray()[0]),
    contentType: "application/json; charset=utf-8",
    url: action,
    dataType: 'html',
    success: function(data) {
        $(dataContainer).html(data);
        $(what).hide();
}

它适用于您的解决方案。但是如果我想使用json呢。对于这个项目,我可以只进行序列化。如果不设置一个示例项目,我无法进行测试,但可以尝试一下答案中的替代解决方案