如何使用knockout点击按钮从多个textareas和单选按钮获取输入?

我有几个textareas和单选按钮,它们是在ko: foreach绑定中动态生成的。 当用户决定输入完成后,他们会点击一个“确定”按钮,它会获取textareas的所有输入和他们选择的单选按钮的值,并且它应该触发对服务器的ajax调用,因为输入需要存储在数据库中。 每个textarea和radiobutton值都是单独存储的,因此需要将它们作为标识值发送到服务器。 鉴于foreach绑定,我一直遇到很多麻烦,所以我不知道从哪里开始因为textareas没有可访问的唯一标识符,因为它们是使用foreach生成的。 谢谢。

所以,简单来说:

  1. 用户键入多个textareas并单击单选按钮。
  2. 完成输入后,用户单击“确定”按钮。 按钮单击function可检索所有textareas和单选按钮值中的用户输入。
  3. 触发ajax调用并将值发送到服务器。

任何帮助表示赞赏或链接到我可以遵循的任何资源。 我的谷歌搜索并没有完全回答我的问题。

图片: 在此处输入图像描述

服务器:

 //retrieves form data from the client and serialized it if (Request.HttpMethod == "POST") { // get json out of body var serializer = new JsonSerializer(); var sr = new StreamReader(Request.InputStream); var jtr = new JsonTextReader(sr); dynamic data = serializer.Deserialize(jtr); if (data.action == "getProjects") { getProjects(data); } } 

通过ajax发布的示例对象:

  Obj = {}; Obj.action = "getProjects"; Obj.list = arrayOfCheckboxValues; 

视图:

   

至:

  

淘汰赛引发了一个错误,说明foreach没有关闭。

我怀疑你是从“jQuery心态”接近这个,因为你做的事情是这样的:

  

它看起来像你试图设置唯一的ID和名称,希望在提交时用jQuery读取输入的val()。 虽然我不知道你的textInput绑定是什么,但似乎doneProjectComment不是你的Project数据模型上的一个observable,因此在中输入的数据并没有真正结束。

Knockout方法是在Project上添加一个doneProjectComment observable,并使用value绑定绑定到它:

  function Project(proj) { self.doneProjectComment = ko.observable(); } 

Knockout为您提供双向绑定。 如果value: doneProjectComment绑定,这意味着如果用户键入textarea,则值将保存到doneProjectComment 。 如果更改了doneProjectComment ,则新值将显示在textarea中。

因此,如果您想在用户单击“确定”时收集所有数据,您可以从Project内部轻松完成 – 只需读取您关注的所有可观察对象,并创建jQuery.post可以用作AJAX参数的哈希:

 function Project(proj) { self.toAjaxParameters = function(){ return { interested: self.interestedAnswer(), done: self.doneAnswer(), ... } } } 

HTML:

如果在ViewModel上设置了savefunction

 self.save = function(project){ $.post('/url-to-post-to', project.toAjaxParameters()); } 

HTML:

  

我建议安装Knockout Context Debugger,这样可以更轻松地调试knockout问题。

Interesting Posts