javascript - 有什么方法可以在标准 mvc 表单帖子中包含 knockoutjs 可观察值吗?

标签 javascript asp.net asp.net-mvc-3 data-binding knockout.js

我正在使用 ASP.NET 4、MVC3、EF 4.3(代码优先)和 knockout JS。我目前正在为我的一个更复杂的模型创建和编辑表单。它附加了各种字段,以及相关对象的多个集合(多对多)。我将针对编辑场景提出我的问题,因为这是两者中较难的一个。

我希望用户能够编辑我已放入 View 模型中的模型的所有字段。为了显示和添加额外的技能(多对多集合之一),我决定使用 knockoutjs 来达到很好的效果,它可以很好地显示集合的序列化初始对象,并允许我添加更多。

我的问题是如何通过将其发送回 Controller 来保存这个相当复杂的模型。由于我的许多字段都可以通过标准 HTML 帮助器很好地在 View 中表示,因此我希望避免多个 AJAX 帖子或将每个字段绑定(bind)到 ko.observable(array)。我真正想要的是只获取多对多集合,将它们绑定(bind)到 ko.observablearrays,并以某种方式将它们作为标准强类型 mvc View 表单帖子的一部分发送回来。

这可能吗?如果是这样,我将如何处理它?我真的很感激任何帮助,到目前为止我的研究还没有产生任何有用的结果。如果有助于更好地描述问题,我愿意发布代码片段。

编辑:根据要求编辑表单的示例 View 模型

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 或等效映射,然后您必须自己在服务器端处理反序列化。

我不认为您正在寻找一种干净的方式来通过表单模型绑定(bind)发回。如果我是你,我会将整个表单绑定(bind)到 json 模型,并回发完整的格式良好的 json 对象以进行自动模型绑定(bind)。恕我直言,服务器端的最终代码会更加简洁。

希望这有帮助。

关于javascript - 有什么方法可以在标准 mvc 表单帖子中包含 knockoutjs 可观察值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9686589/

相关文章:

javascript - 使用 jQuery+HTML 发出 POST 请求以显示 JSON 数据

asp.net - 带有不可见文本框的 Ajax Calendarextender 位置

c# - Asp.Net Mvc 5 Azure Active Directory 获取用户配置文件图像并将其保存在服务器上

asp.net-mvc - MVC 动态值的不引人注目的范围验证

asp.net - ASP.net MVC 中的 viewstate 等价物是什么

javascript - 如何在 Golang 中遍历数据并在 Javascript 中使用时创建唯一 ID

可绘制圆圈之间的javascript碰撞检测

javascript - AngularJS 和 $http 获取 JSON - 数据未定义

c# - 编辑评论框脚本为动态

c# - Response.StatusDescription 未从 JsonResult 发送到 jQuery