将列表传递给javascript以传回控制器

时间:2014-05-08 15:42:23

标签: c# asp.net-mvc

我正在使用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,那么它一切正常,所以事实上它是一个数组就是抛弃它。有什么想法吗?

2 个答案:

答案 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);
    }

单击按钮,并设置断点以检查值 -

enter image description here

答案 1 :(得分:0)

由此您的控制器返回空白视图。确保创建了视图(右键单击 - 转到查看)。如果你想要退货,它应该是这样的:

重新查看视图(myTypes);

但请确保将myTypes视图设置为接受字符串[]。

如果要将列表传递给客户端,请考虑将发送json对象数组的ajax调用并调整后端以接受它。