这是我想要实现的目标:
View1将name
字符串发送到View2,View2将JSON发送到View1,View1解析它并显示数据。
View1将名称字符串发送到View2,如下所示:
$(document).ready(function () {
var myurl = "/Controller/View2";
$("form").submit(function (event) {
$.ajax({
type: 'POST',
url: myurl,
data: $('#nameid').val(),
success: function (newdata) {
View2是一个返回JSON的控制器:
public ActionResult View2(string nameid)
{
//do stuff
return Json(jsObj, JsonRequestBehavior.AllowGet);
}
View1控制器是这样的:
public ActionResult View1(string nameid)
{
if(!string.IsNullOrEmpty(nameid))
{
return RedirectToAction("View2", new { nameid = nameid });
}
else
{
return View();
}
}
我不知道哪个部分搞砸了但是当我点击提交时,它会显示JSON对象本身。我该如何解决这种情况?感谢。
编辑: 这是我的View1视图(我没有查看View2控制器):
<!doctype html>
<html>
<head>
<meta charset="utf-8"></meta>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="~/Scripts/cytoscape.js"></script>
</head>
<style>
#cy {
width: 80%;
height: 80%;
position: center;
top: 0px;
left: 0px;
}
</style>
<body>
<form>
Enter a name:<br>
<input type="text" name="nameid" id="nameid" value="">
<br><br>
<input type="submit" value="Send!">
</form>
<div id="cy"></div>
<script>
var myVar = null
$(document).ready(function () {
$("form").submit(function (event) {
//event.preventDefault();
$.ajax({
type: 'POST',
url: "/Controller/View2",
data: { nameid: $('#nameid').val() },
success: function (newdata) {
var cy = cytoscape({
container: document.getElementById("cy"),
elements: JSON.parse(newdata)
});
}
});
});
});
</script>
</body>
</html>
答案 0 :(得分:1)
首先,您必须阻止正常的表单提交。
其次,要将nameid
值绑定到action参数,必须为其指定正确的名称。
第三。你有一个名为ControllerController
的控制器类吗?
$("form").submit(function (event) {
event.preventDefault();
var myurl = '@Url.Content("~/Controller/View2")';
$.ajax({
type: 'POST',
url: myurl,
data: { nameid: $('#nameid').val() },
success: function (newdata) {
console.log(newdata);
// ...
},
error: function(xhr, status, error) {
console.log("ERROR: " + status + " - " + error);
console.log(xhr.responseText);
});
});
答案 1 :(得分:1)
你能尝试像这样重写ajax并尝试一下。
$.ajax({
type: 'POST',
url: '/Controller/View2',
data:{
nameid: $('#nameid').val()
},
success: function (newdata) {
答案 2 :(得分:1)
请检查您指定的网址是否正确。
var myurl = "/Controller/View2";
因为你有一个名为MainGraph2
的行动
此外,您将无法从Ajax调用重定向。所以尝试重定向Ajax成功回调函数。
另外,如其他答案中所述,您应该将数据传递给控制器,如下所示:
data: { nameid: $('#nameid').val() },
修改强>
一切看起来都很完美,请尝试下面的内容:
$("form").submit(function (event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: "/Sample/View2",
data: { nameid: $('#nameid').val() },
success: function (newdata) {
$("#cy").val(newdata);
}
});
});
此处示例( url:“/ Sample / View2”)是控制器名称( SampleController )。 另外,请确保不要使用nameid作为参数调用视图ID,如
中所示http://localhost/Sample/View1?nameid=Jason
如果以这种方式调用它,它将会重新调整json数据。
注意:我已将控制器命名为SampleController,将 cy 命名为文本的输入类型。