在表单提交时将日期的 JavaScript 数组绑定到页面的视图模型
Binding a JavaScript array of dates to a page's view model on form submit
我在表单中添加了以下字段:
<input asp-for="MyDates" type="hidden" name="MyDates" id="MyDates" />
在我的JavaScript中,我允许用户从计划中选择多个日期并将它们存储在一个数组中。每次更新数组时,我都会使用 JSON.stringify(array) 额外更新隐藏输入字段的值。在表单提交之前,html最终看起来像这样:
<input type="hidden" name="MyDates" id="MyDates" value="["2016-02-17T05:00:00.000Z","2016-02-16T05:00:00.000Z","2016-02-11T05:00:00.000Z","2016-02-12T05:00:00.000Z","2016-02-19T05:00:00.000Z"]">
当用户单击提交时,我希望这些日期绑定到我的视图模型中的 IList MyDates 属性。有人可以告诉我为什么不是吗?此外,如果有更好的方法来做这样的事情,请告诉我。
这是我的 JavaScript 函数的样子,它正在工作......它处理向用户显示日期,并另外创建隐藏的输入字段以进行提交。有没有更好的方法?
function refreshDates() {
var dateListHtml = "";
var baselineDatesHtml = "";
for (var i = 0; i < dates.length; ++i) {
dateListHtml = dateListHtml + dates[i].toLocaleDateString() + ' <i onclick="removeDate(' + i + ')" class="fa fa-minus-circle pull-right" style="cursor: pointer;"></i></span>' + '<br>';
baselineDatesHtml = baselineDatesHtml + '<input asp-for="MyDates" type="hidden" name="MyDates" id="MyDates" value="' + dates[i].toLocaleDateString() + '" />';
}
$("#dateList").html(dateListHtml);
$('#myDates').html(baselineDatesHtml);
}
要使模型绑定正常工作,表单元素的名称应与视图模型属性名称/层次结构匹配。因此,如果您正在执行普通表单提交,最好在表单中添加一个新的表单元素(隐藏元素)并将值存储在那里。只要名称属性值与视图模型属性名称匹配,模型绑定就可以正常工作。
假设您有这样的视图模型
public class CreatePost
{
public IList<DateTime> MyDates { set; get; }
//Some other properties for the view
}
现在,让我们创建一个javascript方法,该方法将创建一个新的表单元素并将其附加到表单中。下面的示例假设您在页面中包含 jQuery。
function addHiddenDate(dateString) {
var itemCount = $("input.myDates").length;
var dat = $("<input type='hidden' class='myDates'
name='MyDates[" + itemCount++ + "]' />").val(dateString);
$("form").append(dat);
}
当用户添加新日期时,而不是添加到数组中,而是调用此方法并传递日期值。
$(function(){
$("#addBtn").click(function(e){
e.preventDefault();
addHiddenDate($("#DateInputField").val());
});
});
现在,当您提交表单时,模型绑定会将发布的表单数据正确映射到操作方法参数,前提是该参数的类型为 CreatePost
[HttpPost]
public ActionResult Create(CreatePost model)
{
// check model.MyDates
// to do : Return something
}
相关文章:
- 角度指令没有更新模型视图
- “渲染骨干模型视图”返回未定义的结果
- 轮询更新主干模型/视图的请求
- 节点.js中的模型-视图-控制器模式
- 图像数据中的更改未反映在模型视图中
- 自定义 ngModel 指令以支持 jquery 插件中的模型>视图绑定
- 优化显示简单项目列表的模型/视图
- 建议:在JavaScript中难以使用模型视图控制器
- 将三维世界矢量转换为模型视图矩阵
- 在主干模型/视图上处理更复杂的验证逻辑(必填字段等)的最佳方式
- AngularJS在POST http请求上更新模型/视图
- web应用程序模型视图中的Java脚本
- 我的第一个骨干模型/视图.我的思路对吗?
- Knockoutjs的日期时间字段更新不会刷新模型视图
- Backbone.js中的嵌套集合/模型视图管理
- Javascript“this"模型视图演示器设计中的问题
- 模型视图控制器-javascript mvc框架设计实践,用于编辑就地界面
- 模型视图控制器-任何使用javascript mvc的人
- 模型视图控制器-我们是否在使用JavaScriptMVC(MVVM)框架,如Backbone.js、Angular等
- 模型视图控制器-AngularJS中是否可以在经典的javascript函数中使用数据绑定