我正在使用ASP.NET MVC,我的模型有一个列表作为其中的一部分。我想把这个列表传递给一个javascript函数,在这个函数里面我转过身来想把它传回控制器。
目前我有:
@Html.ActionLink("Edit", "Edit", "Data", new { onclick = string.Format("EditRecord({0});", Model.Types) })
Model.Types定义为List
我的javascript EditRecord定义为:
function EditRecord(types)
{
$.post("/Data/Edit/" { myTypes: types });
}
我的控制器定义为:
[HttpPost]
public ActionResult Edit(string[] myTypes)
{
return View();
}
当我运行这个时,我找不到页面。如果我将这个从列表中切换到一个普通的数据类型,如int或string,那么它一切正常,所以事实上它是一个数组就是抛弃它。有什么想法吗?
答案 0 :(得分:1)
这是我的解决方案,让我们说你有一个模型按以下方式持有List属性 -
public class MyModel
{
public List<string> Types { get; set; }
}
此模型将在以下控制器操作中构建,并将返回到视图 -
public ActionResult Index()
{
MyModel model = new MyModel();
model.Types = new List<string>();
model.Types.Add("Admin");
model.Types.Add("User");
model.Types.Add("SuperAdmin");
return View(model);
}
View有以下Html -
@model Rami.Vemula.Dev.Mvc.Controllers.MyModel
@{
ViewBag.Title = "Home Page";
}
<div class="row">
<a href="#" id="ClickMe">Click me</a>
</div>
现在JQuery部分将保存逻辑以将List发送到控制器操作 -
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
$(document).ready(function () {
$("#ClickMe").click(function () {
var o = new Object();
o.Types = @Html.Raw(Json.Encode(Model.Types));
jQuery.ajax({
type: "POST",
url: "@Url.Action("GetJson")",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(o),
success: function (data) {
alert(data);
},
failure: function (errMsg) { alert(errMsg); }
});
});
});
</script>
然后点击按钮,它将点击以下控制器 -
public JsonResult GetJson(List<string> Types)
{
return Json(Types, JsonRequestBehavior.AllowGet);
}
单击按钮,并设置断点以检查值 -
答案 1 :(得分:0)
由此您的控制器返回空白视图。确保创建了视图(右键单击 - 转到查看)。如果你想要退货,它应该是这样的:
重新查看视图(myTypes);
但请确保将myTypes视图设置为接受字符串[]。
如果要将列表传递给客户端,请考虑将发送json对象数组的ajax调用并调整后端以接受它。