在标准mvc表单帖子中包含knockoutjs可观察值的任何方式
Any way to include knockoutjs observable values in standard mvc form post?
我使用的是ASP.NET 4、MVC3、EF 4.3(代码优先)和敲除JS。我目前正在为我的一个更复杂的模型创建和编辑表单。它附加了各种字段,以及相关对象的几个集合(多对多)。我将为编辑场景提出我的问题,因为这是两者中较难的一个。
我希望用户能够编辑模型的所有字段,我已经将这些字段放入视图模型中。为了显示和添加额外的技能(多对多集合中的一个),我决定使用knockoutjs来达到很好的效果,它可以很好地显示集合的序列化初始对象,并允许我添加更多。
我的问题是如何通过将这个相当复杂的模型发送回控制器来保存它。由于我的许多字段可以在视图中由标准的HTML助手很好地表示,我希望避免多个AJAX帖子或将每个字段绑定到一个ko.observabrarray(数组)。我真正想要的是只使用多对多集合,将它们绑定到ko.obsservabrarrays,并以某种方式将它们作为标准强类型mvc视图表单帖子的一部分发送回来。
这可能吗?如果是这样的话,我该如何处理呢?我真的很感激任何帮助,我的研究到目前为止还没有产生任何有用的结果。如果这有助于更好地描述问题,我愿意发布代码摘要。
edit:根据要求编辑表单的示例视图模型
namespace MyProject.Models
{
[NotMapped]
public class JobViewModel
{
public int JobID { get; set; }
[Required]
public string Title { get; set; }
[Required]
public string Description { get; set; }
[Display(Name = "Start Date")]
[DataType(DataType.Date)]
public DateTime StartDate { get; set; }
[Display(Name = "End Date")]
[DataType(DataType.Date)]
public DateTime EndDate { get; set; }
// Foreign Keys
[Display(Name = "Hiring Manager")]
[Required]
public string HiringManagerID { get; set; }
[Display(Name = "Assigned User")]
public string AssignedUserID { get; set; }
//Collections for many-to-many properties
public List<JobSkillViewModel> JobSkills { get; set; }
}
}
和我收藏的ViewModel:
namespace MyProjectModels
{
[NotMapped]
public class JobSkillViewModel
{
public int SkillID { get; set; }
public int LevelID { get; set; }
public string SkillName { get; set; }
public string LevelDescription { get; set; }
}
}
我不建议这样做,但如果你觉得必须使用表单发布。为什么不简单地将集合作为JSON序列化到隐藏的表单字段中呢。
<input name="something" type="hidden" data-bind="text: collectionToJson" />
您的collectionToJson方法将调用ko.toJSON
或等效的映射,然后您必须自己在服务器端处理反序列化。
我不认为你这样做是为了找到一种通过表单AND模型绑定返回的干净方法。如果我是你,我会将整个表单绑定到一个json模型,并发布一个完整的格式良好的json对象用于自动模型绑定。服务器端的结果代码将是更干净的IMHO。
希望这能有所帮助。
- 如何按id查找两个类中任一类的子元素
- HackReactor,编码窗口现在可以访问一个名为“”的对象;招生;使用名为“;showApp”;.调用此方法时不带任
- 是否有任何用Javascript编写的开源JSDoc解析器
- 禁用负责任设计中的元素
- 在 JavaScript 中使用正则表达式在单词的任一侧添加空格
- 祖尔布基金会 使用 12 列布局的任一侧的空间
- 任何在Phonegap中跟踪主页按钮按下事件的可能性
- 任何在javascript中捕获上下文菜单“粘贴”的方法
- 如何使用任一类jquery搜索父级
- javascript预加载任何在chrome中不起作用的图像
- toFixed是'Don’不要做任何事
- 用JS转换任何以hashtag开头的东西.但前提是超过3个字符
- Gradle exec任务在用Karma运行javascript单元测试时挂起
- 任何在Android中与WebView通信的方式
- 任何以0开头的号码都被认为是电话号码
- 如何在不支持HTML5或flash的任天堂3ds浏览器中播放视频
- SASS任务在gulp with sourccomments: 'map'生成'断言失败'
- 在发射下键时禁用任天堂3DS滚动功能
- 在Backbone中,model.get('foo')和model.attributes.foo之间的任
- Fine uploader Async任务在Chrome中工作,但在IE11中不工作