首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当表单包含所有表的所有字段时,MVC3ef代码first 4.1 -inserting数据规范化的表结构

当表单包含所有表的所有字段时,MVC3ef代码first 4.1 -inserting数据规范化的表结构
EN

Stack Overflow用户
提问于 2011-10-14 06:19:14
回答 1查看 409关注 0票数 0

问:当用户单击submit时,将数据插入到正确的表中的最佳策略是什么?我是否应该在httppost中实例化3个视图模型,并使用Myform属性填充我的3个视图模型1.mvr,2.MvrMedation 3.AdminRoute,然后保存每个视图模型的记录?

假设某人转到一个表单,该表单包含来自下面所有3个视图模型的数据

代码语言:javascript
运行
复制
 1. MVR class, 
 2. MvrMedication
 3. AdminRoute

所以我的视图模型看起来像

代码语言:javascript
运行
复制
public class MyForm
{
   public virtual Mvr Mvr{get;set;}
   public virtual MvrMedication MvrMedication{get;set;}
   public virtual AdminRoute AdminRoute{get;set;}
}

然后在我所有属性的视图编辑器中。当用户单击submit时,将数据插入到正确的表中的最佳策略是什么?

下面是一些代码,仅供参考

代码语言:javascript
运行
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
//Please use: http://blogs.msdn.com/b/efdesign/archive/2010/06/01/conventions-for-code-first.aspx

namespace MVR.Models.Tables
{
    public class Mvr
    {
        [Key]
        public virtual int MvrId { get; set; }
        public virtual ICollection<MvrMedication> MvrMedicationId { get; set; }

        public virtual DateTime DateOfReport { get; set; }
        public virtual DateTime DateOfVariance { get; set; }
        public virtual String   IndividualFirstHospitalNumber { get; set; }
        public virtual String   MallUnit { get; set; }
        public virtual Boolean  PhysicianNotified { get; set; }
        public virtual DateTime PhysicianDateNotified { get; set; }
        public virtual Boolean   PharmacistNotified { get; set; }
        public virtual DateTime PharmacistDateNotified { get; set; }
        public virtual DateTime PharmacistDateOfNotification { get; set; }
        public virtual Boolean  InitialSignature { get; set; }
        public virtual String   VarianceDescription { get; set; }

    }
}







using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace MVR.Models.Tables
{
    public class AdminRoute
    {
        [Key]
        public virtual int AdminRouteId { get; set; }
        public virtual MvrMedication MvrMedicationId { get; set; }
        public virtual string RouteName { get; set; }
    }

    }






    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.ComponentModel.DataAnnotations;
    namespace MVR.Models.Tables
    {
        public class MvrMedication
        {
            [Key]
            public virtual int MvrMedicationId{ get; set; }
            public virtual ICollection<AdminRoute> AdminRouteId { get; set; }

            public virtual string MvrMedicationName { get; set; }

        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-14 10:19:31

您的视图模型看起来很好,但我建议您为MvrMvrMedicineAdminRoute类创建视图模型,以使其更加用户友好。通常,您不应该在视图中看到Id。

在视图端,只需为表单上的输入使用@Html.EditorFor并将其提交给控制器中的HttpPost方法

代码语言:javascript
运行
复制
@model MvcProject.Models.MyForm

@using (Html.BeginForm()) {
    <fieldset>
        <legend>Mvr</legend>
        @Html.EditorFor(m => m.Mvr)
    </fieldset>

    <fieldset>
        <legend>MvrMedication</legend>
        @Html.EditorFor(m => m.MvrMedication)
    </fieldset>

    <fieldset>
        <legend>AdminRoute</legend>
        @Html.EditorFor(m => m.AdminRoute)
    </fieldset>

    <p>
        <input type="submit" value="Save" />
    </p>
}

默认@Html.EditorFor()将为模型中的每个属性生成默认输入。您可以为每个视图模型创建自己的自定义编辑器模板,也可以只定义表单中的每个输入,但编辑器模板更简洁且可重用。

这是一个很好的editor templates教程。它是针对MVC2的,但概念是相同的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7761109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档