【问题标题】:Is special setup required to get Knockout to work with MVC model binding?是否需要特殊设置才能让 Knockout 与 MVC 模型绑定一起使用?
【发布时间】:2014-07-05 10:59:15
【问题描述】:

我看到了这个question 关于 KO 绑定和 MVC 的内容,这让我很担心。这个问题很长,我不知道它是否适用于我正在尝试做的事情。

我有一个输入:

<input 
    id="Item_ReqestedItem_ItemNumber" 
    type="text" value="" name="Item.ReqestedItem.ItemNumber" 
    data-bind="value: ItemNumberItem, disable: ItemNumberItem.isServerSet" 
    disabled="">

如果我在此字段中手动键入一个值并 POST,则该值将传递给控制器​​/操作。如果我让 KO 填充此数据,则 POST 的值显示为 null。

当我使用 Knockout 值时,将此值发送到 POST 所需的最少工作量是多少?

  • 我没有使用 ko.editable。我需要吗?
  • 我没有做任何事情来支持 MVC 和 KO 在文档就绪中的这种关系。为了完成这个简单的任务,我需要这样做吗?

更新

cmets 是正确的。导致值为空的是禁用属性。简单的fix 是只读的。我仍然没有解决这个问题。摆脱残疾人不是一种选择。我不明白如何在不抛弃 KO 框架的情况下切换到只读。如何将禁用的数据返回到服务器?我更喜欢用 KO 来解决这个问题,因为我必须管理大约 30 个输入。

【问题讨论】:

  • ItemNumberItem.isServerSet 何时为真?是当您让“KO 填充此数据”时?
  • 是的,我尝试删除禁用,但没有任何区别
  • 没有?好的,我以为是因为某些浏览器在禁用时不发送值
  • 敲除的value 绑定会改变它绑定的输入值。因此,只要输入具有模型绑定器可以映射到您的模型的名称,通过敲除更改 ItemNumberItem 与手动更改它没有任何不同。我的猜测也是提交时 isServerSet 为真。如果比较两个 POST 请求会怎样?
  • @GôTô - 你们俩都为我在走错路时省去了很多麻烦。如果您想发布答案,我想给你们俩一些信任。与你们两个所做的相比,问题的最后一部分很容易解决。

标签: html asp.net-mvc knockout.js


【解决方案1】:

disabled 属性将阻止您输入的数据被提交。

您想改用 readonly 属性。

你可以查看这个帖子:What's the difference between disabled=“disabled” and readonly=“readonly” for HTML form input fields?

只读元素是不可编辑的,但在 根据表格提交。禁用的元素不可编辑且不可编辑 提交时发送

【讨论】:

    【解决方案2】:

    无需特殊设置即可让 KO 与 MVC 一起使用。 cmets 是正确的,因为 disabled 属性导致数据无法 POST。我正在添加一个绑定处理程序以支持 KO 中的只读。只读应该 POST。 Fiddle

      ko.bindingHandlers.readOnly = {
        update: function(element, valueAccessor) {
            var value = ko.utils.unwrapObservable(valueAccessor());
            if (value) {
                element.setAttribute("readOnly", true); 
            }  else {
                element.removeAttribute("readOnly");
            }  
        }  
    }
    
    var viewModel = {
        text: ko.observable("test"),
        locked: ko.observable(false)
    };
    
    
    ko.applyBindings(viewModel);
    

    【讨论】:

      猜你喜欢
      • 2016-02-25
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多