我是客户端 - 服务器编程概念的新手。我需要的是,将四个js变量发送到我的MVC 3控制器动作。
$(document).ready(function() {
var $jcrop;
$('#image').Jcrop({
bgColor: 'red',
onSelect: refreshData
}, function () {
$jcrop = this;
});
function refreshData(selected) {
myData = {
x1: selected.x1,
x2: selected.x2,
y1: selected.y1,
y2: selected.y2
};
}
});
所以我在浏览器中获取我的变种。
我在服务器端拥有的是:
public ActionResult CreateCover(ImageCoordinates coordinates) {
ViewData.Model = coordinates;
return View();
}
public class ImageCoordinates
{
public int x1 { get; set; }
public int x2 { get; set; }
public int y1 { get; set; }
public int y2 { get; set; }
}
有没有一种简单的方法可以将我的四个参数从js发布到我的动作中? 我试图使用$ .ajax
在这个网站上使用几个例子喜欢这个
$.ajax({
url: '/dashboard/createcover',
type: 'POST',
data: JSON.stringify(myData),
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert(data.success);
},
error: function () {
alert("error");
},
async: false
});
但它不起作用,我在行动中收到了0 0 0 0。但说实话,我甚至不确定如何调用这个jquery函数。我应该通过点击按钮来呼叫它,还是在我发布表单时自动呼叫? 还有其他方法可以发送这个参数吗?
答案 0 :(得分:10)
这是解决方案 -
模型 -
public class ImageCoordinates
{
public int x1 { get; set; }
public int x2 { get; set; }
public int y1 { get; set; }
public int y2 { get; set; }
}
行动 -
public ActionResult CreateCover(ImageCoordinates coordinates)
{
return null;
}
让我们创建一个View,它将对Action进行AJAX调用。
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
function submitForm() {
var model = new Object();
model.x1 = 120;
model.y1 = 240;
model.x2 = 360;
model.y2 = 480;
jQuery.ajax({
type: "POST",
url: "@Url.Action("CreateCover")",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ coordinates: model }),
success: function (data) {
alert(data);
},
failure: function (errMsg) {
alert(errMsg);
}
});
}
</script>
<input type="button" value="Click" onclick="submitForm()" />
输出 -
答案 1 :(得分:2)
尝试更改传递给控制器的对象的名称:
$.ajax({
url: '/dashboard/createcover',
type: 'POST',
data: {coordinates : JSON.stringify(myData)}, //change here
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert(data.success);
},
error: function () {
alert("error");
},
async: false
});
请注意,这会将值作为JSON对象发布。您需要像这样修改控制器:
public ActionResult CreateCover(string jsonCoordinates) {
ImageCoordinates coordinates = JsonConvert.DeserializeObject<ImageCoordinates >(jsonCoordinates);
ViewData.Model = coordinates;
return View();
}
您还需要添加对Newtonsoft.Json
的引用。