【问题标题】:Knockout MVC asp.net How to pass model back to the serverKnockout MVC asp.net 如何将模型传回服务器
【发布时间】: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


【解决方案1】:

让您的“myAction”成为帖子。然后模型就会通过。

【讨论】:

    【解决方案2】:

    我建议您为此构建自己的模型绑定器。如果我理解正确,您正在从动态发送的字段创建表单。

    问题在于,当参数被传回时,它们是单独传递的。 MVC 模型绑定器无法将其重新组合为 List,因为它不知道如何执行此操作。内置模型绑定器将根据命名参数进行转换。

    this answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2014-09-14
      • 1970-01-01
      • 2012-01-13
      • 2023-03-28
      相关资源
      最近更新 更多