gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 05:01:50 31 4
gpt4 key购买 nike

我的 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com