c# - 在 MVC 上使用嵌套模型 3 : How to update a table inside a table?(外键)

标签 c# asp.net asp.net-mvc-3 entity-framework razor

所以我对 ASP.NET MVC3 编程比较陌生,特别是因为 Entity Framework 代码首先创建和管理数据库的方式。

所以,我正在研究一个完整的营养系统,它必须允许营养师评估患者。因此,首先,系统允许设置一个约会,同时获取营养师的 ID、患者的 ID 和日期时间。预约结束后,营养师必须能够更新预约,并包括营养师估价表,其中包括允许特定患者进食的量。

所以,我的类如下

模型:NutritionalEvaluation.cs

    public class NutritionalEvaluation
{
    [ScaffoldColumn (false)]
    public virtual int ID { get; set; }
    public virtual int KiloCal { get; set; }
    public virtual int Proteines { get; set; }
    public virtual int Carbs { get; set; }
    public virtual int Fiber { get; set; }
    public virtual int Fats { get; set; }
    public virtual int Cholesterol { get; set; }
    public virtual int Water { get; set; }
    public virtual int Alcohol { get; set; } 
}

模型:PatientAppointment.cs

    public class PatientAppointment
{
    public virtual int ID { get; set; }
    public virtual int IDClient { get; set; }
    public virtual int IDNutritionist { get; set; }
    public virtual DateTime Date { get; set; }
    public virtual String Comments { get; set; }
    public virtual NutritionalEvaluation Valuation { get; set; }
}

如您所见,NutritionalValuation 是 PatientAppointment 的一个字段。

查看:EvaluateAppointment.cshtml @model NutricionApp.Models.PatientAppointment

    @{
        ViewBag.Title = "Valuation";
    }

    <h2>Valuation</h2>

    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")"         type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

    @using (Html.BeginForm()) {
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>PatientAppointment</legend>

    @Html.HiddenFor(model => model.ID)
    @Html.HiddenFor(model => model.IDClient)
    @Html.HiddenFor(model => model.IDNutritionist)

(在此之前,创建了一个 PatientAppointment,并且 IDClient 和 IDNutritionist 字段都已填充。)

    <div class="editor-label">
        @Html.LabelFor(model => model.Date)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Date)
        @Html.ValidationMessageFor(model => model.Date)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Comments)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Comments)
        @Html.ValidationMessageFor(model => model.Comments)
    </div>
    <!--
    <div class="editor-label">
        @Html.LabelFor(model => model.Valuation)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Valuation)
        @Html.ValidationMessageFor(model => model.Valuation)
    </div>

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

MVC 足够智能,可以将 NutritionalEvaluation 呈现为另一组字段,并将该类的所有字段包含在 View 中。我的问题是,当我尝试提交表格时(从技术上讲,它应该允许更改日期、添加评论,然后添加 NutritionalEvaluation 字段)除了 NutritionalEvaluation 之外的所有内容都保存在表格中。它保持为空,而 NutritionalValue 表保持为空。我能做什么?

编辑1:

Controller :PatientAppointmentController.cs

    namespace NutritionApp.Controllers
    {
        [Authorize]
        public class PatientAppointmentController : Controller
        {
            private NutritionDB db = new NutritionDB();

...

    public ActionResult EvaluateAppointment(int ID)
    {
        PatientAppointment appoint = db.PatientAppointment.Find(ID);
        return View(appoint);
    }

    [HttpPost]
    public ActionResult EvaluateAppointment(PatientAppointment appoint)
    {
        if (ModelState.IsValid)
        {
            db.Entry(appoint).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(appoint);
    }

    public ActionResult ViewAppointments()
    {
        return View();
            }

        }
    }

最佳答案

我没有在这台电脑上安装 Visual Studio,所以我无法测试它...

假设您正在使用 Entity Framework 代码优先方法,您的 NutritionalEvaluation 类与您的 PatientAppointment 类没有外键关系。假设存在 1-1 关系,将 NutritionalEvaluation 更改为:

public class NutritionalEvaluation
{
    [ScaffoldColumn (false)]
    public virtual int ID { get; set; }

    // This is the name of the navigation property defined below
    [ForeignKey("PatientAppointment")]
    public virtual int AppointmentID { get; set; }

    public virtual int KiloCal { get; set; }
    public virtual int Proteines { get; set; }
    public virtual int Carbs { get; set; }
    public virtual int Fiber { get; set; }
    public virtual int Fats { get; set; }
    public virtual int Cholesterol { get; set; }
    public virtual int Water { get; set; }
    public virtual int Alcohol { get; set; }

    // Add navigation property to PatientAppointment
    public virtual PatientAppointment PatientAppointment { get; set; }
}

关于c# - 在 MVC 上使用嵌套模型 3 : How to update a table inside a table?(外键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13464149/

相关文章:

c# - Selenium - 关闭带有确认警报的窗口。 C#

c# - 像方法一样调用asp net web服务

c# - 推送通知无法使用 asp.net 到达 ios 设备?

c# - 如何使用 C# 从父 Gridview 获取值

c# - 如何在 ASP.NET 应用程序中使用同一程序集的两个版本?

c# - 从 MySql 数据库收集数据后,我的 ASP.NET 应用程序不显示填充的 GridView

asp.net-mvc - 使用 Razor 的 Html.RenderPartial() 语法

asp.net - 如何在 mvc 3 razor View 中将可空小数格式化为货币,仅用于显示目的

c# - 让 autofac 与 mvc6 beta5 一起工作

c# - HttpException - Chrome 中超出了最大请求长度