将 javascript 动态添加的元素提交到控制器方法,如 Stackoverflow
Submit javascript dynamically added elements to controller method like Stackoverflow
简单地说:我想让用户在JS中选择一些标签并将其提交给我的控制器。以下是我的建议:
- 使用命名约定为每个插入的标签创建一个隐藏输入:
Tag123
(123 = 此标签的唯一标识符),并在 my action 方法中循环访问FormCollection
以找出选择了哪些标签。缺点很明显:使用FormCollection
而不是ViewModel
并遍历FormCollection
来获取我想要的数据对我来说似乎很糟糕。 - 创建一个隐藏的输入,并将每个选定的标签附加到其中。这在删除标签时可能会变得混乱,因为我应该从输入的当前值中找到正确的 id 并将其删除。但是Pro是我只有一个元素,可以将其放在视图模型中以在控制器操作中访问它。
- 好奇是否有人知道SO是如何做到的。他们现在有点定义标准。很想知道他们是怎么做到的。
谢谢。
我有一个网站正在运行,可以选择添加标签,就像 SO 一样。
然而,我解决这个问题的方法导致我为每个添加的标签创建一个输入字段,并在每次添加新输入时递增一个 javascript 索引变量,然后利用 ViewModel 绑定IList<TagDTO> tags { get; set; }
(无论如何,表单往往会随着时间的推移而变得复杂,所以视图模型几乎总是一个好方法)。以下是在页面中创建的 html 隐藏输入的示例:
name=tags.Index, value=0
name=tags[0].tagid, value=201
name=tags.Index, value=2
name=tags[2].tagid, value=307
这对我来说有一个很大的优势:国际化标签,并可能不允许不存在的标签。
我的意思是每个标签都有一个 ID,在数据库中的"标签"表中,我支持的每种语言都有一列用于此标签的名称。如:
tagid | name_ptBR | name_en
201 | animais | animals
307 | educacional | educational
这只是我解决问题的方法,但到目前为止效果很好。
Stack Overflow 只有一个文本输入字段,通过 JavaScript 的自动完成功能增强了该字段。当它被发送到服务器时,字段被空格分割,相应的标签按名称查找。我建议您这样做,因为它是所有选项中最容易访问的。
相关文章:
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 如何在单击复选框后调用控制器方法
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 错误405:向Java控制器(Ajax)发送JSON时找不到POST方法
- 从全局函数调用Ember控制器上的方法
- 将方法从控制器注入到未使用右变量调用的指令
- Ember.js:将Em.$.getJSON转换为promise并将响应绑定到控制器上下文的正确方法
- 在嵌套递归指令中将参数传递给父控制器方法
- 为什么't我的角度控制器'在其某个方法内的作用域中的依赖项
- 如何在使用$timeout进行指令渲染后调用控制器方法
- JQuery$.ajax()发布数据以调用我的控制器中的方法
- 使用javascript将控制器方法移动到客户端
- 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么
- Rails Assets Pipeline从控制器和方法加载JavaScript
- AngularJS在页面重定向上执行控制器方法
- 从填充了 AJAX 的下拉列表中获取控制器的操作方法中的值
- 如何从服务器端控制器返回或调用已签名的小程序的方法
- 如何使用 javascript 而不是使用控制器中的方法在 rails 中呈现部分按钮单击
- 控制器中的 MVC3 自动完成和开机自检方法
- 如何使用javascript express node将变量从控制器中的一个方法公开.js到另一个控制器.js