我想通过使用ajax将值从视图传递给控制器。
<button onclick="addCommentByAjax()" >Save</button>
我的剧本:
function addCommentByAjax() {
$.ajax({
type: "POST",
url: '/Survey/DoDetailSurvey',
data: {
choiceId: "1"
}
});
}
控制器:
[HttpPost]
public ActionResult DoDetailSurvey(SurveyViewModel model, string choiceId)
{
//
}
但是choiceId始终为null
答案 0 :(得分:2)
改变一些事情。
首先为您的按钮分配一个id或类。第二个删除内联onclick
函数并使用ajax click
函数。然后将请求类型指定为Post。
$('#btnComment').click(function () {
var choiceId = $('#YourChoiceId').val();
$.ajax({
url: '/Survey/DoDetailSurvey',
data: { 'choiceId' : choiceId},
type: "post",
cache: false,
success: function (response) {
//do something with response
},
error: function (xhr, ajaxOptions, thrownError) {
alert('error occured');
}
});
});
然后你的控制器应该是这样的
[HttpPost]
public ActionResult DoDetailSurvey(string choiceId)
{
//
}
我不知道你是如何填充你的视图模型的,所以我故意删除它们并展示了一个有效的例子。
如果你想传递viewmodel,你应该像这样构建你的数据对象:
var data = {};
data.Property1 = some val;
data.Property2 = "some val";
$.post('/Survey/DoDetailSurvey', data);
SurveyViewModel的示例结构我假设:
public class SurveyViewModel
{
public int Property1 { get; set; }
public string Property2 { get; set; }
}
答案 1 :(得分:1)
由于控制器中有两个参数,您需要从客户端识别它们。此外,您应指定contentType
。
你像这样传播有效载荷:
function addCommentByAjax() {
var payload = {
model: {
// whatever properties you might have
},
choiceId: 1
};
$.ajax({
type: "POST",
url: '/Survey/DoDetailSurvey',
contentType: 'application/json',
data: JSON.stringify(payLoad)
});
}
答案 2 :(得分:0)
function addCommentByAjax() {
$.ajax({
type: "POST",
url: '/Survey/DoDetailSurvey?choiceId=1'
}
});
}
您也可以像这样传递
或更多参数
function addCommentByAjax() {
$.ajax({
type: "POST",
url: '/Survey/DoDetailSurvey?choiceId=1&Name=Arun'
}
});
}