javascript - 如何在 Razor 中保存 ViewModel 的数组

标签 javascript asp.net-mvc

我的 ViewModel 看起来像

public class MyVm
{
    public List<string> MyList{get;set;}
}

在我的 .chstml 文件中,我想通过 JavaScript 数组填充它

我该怎么做

这是我的努力

@Html.HiddenFor(a => a.MyList)
<script>
    var myJsList = ["this", "that"];
    document.getElementById("MyList").value = myJsList;
</script>

问题是当我单击保存按钮时,我的 Controller 显示

public ActionResult Save(MyVm model)
{
    //model.MyList is null
}

最佳答案

您无法存储复杂类型,例如 List<string>在单个隐藏输入中。您将需要多个隐藏字段。例如,您可以为这些隐藏字段设置一个容器:

<div id="container"></div>

您将根据 JavaScript 字符串数组中存储的值动态注入(inject)相应的隐藏字段:

<script>
    var myJsList = ["this", "that"];
    var container = document.getElementById("container");
    for (var i = 0; i < myJsList.length; i++) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", "MyList[" + i + "]");
        hiddenField.setAttribute("value", myJsList[i]);
        container.appendChild(hiddenField);
    }
</script>

所以基本上你最终会得到以下 DOM:

<div id="container">
    <input type="hidden" name="MyList[0]" value="this" />
    <input type="hidden" name="MyList[1]" value="that" />
</div>

如果您希望标准 ASP.NET MVC 模型绑定(bind)器将这些值合并为 List<string>,这就是您的目标。进入您的 View 模型。

关于javascript - 如何在 Razor 中保存 ViewModel 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42192438/

相关文章:

javascript - 隐形验证码 - 挑战未出现

javascript - 使用 Javascript 引用同一对象中的函数

asp.net-mvc - 延迟加载和 RequiredAttribute 问题 : The XXX field is required

c# - ASP.NET MVC 发布的实体未映射到 LINQ 模型

javascript - 如何重新加载 URL 链接,使其在单击提交按钮后保持不变

javascript - onclick 处理程序中的 this 关键字不起作用

javascript - 在 ie8 中用日语字符模拟文本区域的 maxlength-

ASP.NET MVC - 如何实现可重用的用户控件并保持DRY?

c# - 通过 AJAX 将数组传递给 Controller Action

c# - 如何在 Azure 移动应用服务中获取 Cosmos Db 数据