【发布时间】:2014-01-25 12:59:38
【问题描述】:
我正在使用淘汰库创建动态用户输入,但是当我提交表单时,服务器端不包含我最初发送的所有数据;我正在使用包含 IEnumerable 属性的模型。指定模型的视图是 ReportModel,如果我调试 JS,我可以正确地看到所有字段的 fieldValue 变化。我还使用 Html.BeginForm... 发布表单,在我对控制器的操作中,我只是获得第一个字段(总是第一个),如果有帮助,我得到的值是正确的(我设置的那个)与输入)
我的服务器端模型:
public class ReportField
{
public string fieldName {get; set;}
public string fieldValue {get; set;}
//other properties
}
public class ReportModel
{
ReportFieldpublic List<ReportField> fields{ get; set; }
}
这是我的客户端代码:
var viewModel = { reportModel: ko.mapping.fromJS(@Html.Raw(Json.Encode(Model)))};
$(document).ready(function () {
ko.applyBindings(viewModel);
};
以及绑定到输入:
//...foreach
<input type="text" data-bind="value: fieldValue, attr: { name: ' + fieldName() +'}" />
欢迎任何帮助,谢谢!
编辑:当我将 ReportField 的其他属性与隐藏输入绑定时,然后在服务器端我正确地获取了所有字段和值......这是为什么呢?如何将所有字段发送到服务器并避免使用隐藏输入?
控制器动作:
[HttpPost]
public ActionResult myAction(ReportModel model)
{
foreach(ReportField field in model.fields){
//model.fields only have one item when I not bind of the other properties on a hidden
}
//rest of the code
}
表单提交:
@using (Html.BeginForm("myAction", "Controller", FormMethod.Post, new { @id = "reportForm" }))
<input type="submit" value="OK" />
$(document).ready(function () {
$("#reportForm").submit(function () {
var valid = isValidForm();
return valid;
});
}
到目前为止,解决方案是将 ReportField 的某些属性绑定到隐藏的输入,然后该操作正确接收所有字段...只是想知道是否有另一种方法。
【问题讨论】:
-
向我们展示您的控制器操作代码。
-
另外,这个answer 可能会有所帮助。
-
我添加了控制器动作
-
你能在你的cshtml中显示你的提交代码吗?
-
您没有添加实际提交,您只是添加了@using (Html.BeginForm(....))。我要问的是,显示类似于“” 的代码行
标签: asp.net-mvc asp.net-mvc-4 mvvm knockout.js razor-2