我需要在不使用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);
}
答案 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);
}