如何在没有模型和使用Ajax的情况下将表单值发布到Mvc中的Controller?

时间:2014-07-14 14:21:22

标签: ajax asp.net-mvc-4

我需要在不使用model属性的情况下将from属性名称和值发布到Mvc web api Controller,因为我还需要对不同的Forms使用相同的Ajax调用(方法)。

使用这个Ajax方法我需要发布我发布值的值,但我需要如何在Controller中接收这些值

发布示例:

function Add(){var model = $("#Enquiry").serialize();  
$.ajax({
    url: 'http://localhost:60533/api/Enquiry',
    type: 'POST',
    dataType: 'json',
    data: model,
    success: function (data) {
        console.log(data);
    }
});}

使用下面的控制器如何在不使用C#(获取设置属性)模型的情况下接收模型值?

public HttpResponseMessage Post(object model)
    {
        var Result = (new EnquiryDtl().Post(model));
        return Request.CreateResponse(HttpStatusCode.OK);
    }

3 个答案:

答案 0 :(得分:1)

我就是这样做的......

var dataArray = $("#Enquiry").serializeArray(),
var model = {};
for (i = 0; i < dataArray.length; i++)
    model[dataArray[i].name] = dataArray[i].value;
var url = 'http://localhost:60533/api/Enquiry';
$.ajax({
    url: url, type: "POST", dataType: 'json',
    data: JSON.stringify(model), contentType: 'application/json',
    success: function (data) {
        ....
    }
});

并在控制器中:

public HttpResponseMessage Post(Dictionary<string, string> fields)
{
    ...
}

答案 1 :(得分:0)

正如您无疑发现的那样,object没有很多有用的属性。这是使用模型真正派上用场的地方。例如,假设您发布了一个名为ID的整数和一个名为Name的字符串,则会相应地填充此简单对象:

public class MyModel
{
    public int ID { get; set; }
    public string Name { get; set; }
}

你可以在你的方法中使用它:

public HttpResponseMessage Post(MyModel model)
{
    // here you can access model.ID and model.Name
}

如果确实不想使用模型,可以直接在方法签名中包含这些值:

public HttpResponseMessage Post(int id, string name)
{
    // here you can access id and name
}

当然,使用模型带来了更多优势。具体来说,您可以向模型添加业务逻辑(因为业务逻辑属于模型而不属于控制器)。其他好处包括能够修改结构而无需修改所有消费代码。 (例如,如果您有多个接受此结构的方法,那么您必须更改所有这些以添加新字段。使用模型,您只需要更改该模型。)

答案 2 :(得分:0)

最后我得到了解决方案使用Ajax和web Api将密钥对值发送到Mvc控制器。

不使用C#Model获取设置属性

我的剧本:

function Enquiry() {
var dataArray = $("#formMember").serializeArray(),
model = {};
for (i = 0; i < dataArray.length; i++) {
   var Name = "["+i+"]"+""+"."+"Key";
   var Value = "[" + i + "]" + "" + "." + "Value" 
   model[Name] = dataArray[i].name;
   model[Value] = dataArray[i].value;
}
$.ajax({
    url: 'http://localhost:60533/api/Enquiry',
    type: 'POST',
    data: model,
    success: function (data) {
        alert(data);
    }
});}

C#代码

我正在接受那些值而不是对象我正在使用字典

 public HttpResponseMessage Post(Dictionary<string, string> dictionary)
    {
        var Result = (new EnquiryDtl().Post(dictionary));
        return Request.CreateResponse(HttpStatusCode.OK);
    }