【问题标题】:Getting the parent model ID when adding a child entry in MVC 3 w/razor?在 MVC 3 w/razor 中添加子条目时获取父模型 ID?
【发布时间】:2012-02-06 23:45:25
【问题描述】:

因此,在一对多关系数据库结构化应用程序中,您当然需要能够为父级添加多个子条目...所以假设您有一个用户,并且该用户可以有一个配置文件,但是每个配置文件可以有多个项目,当然项目由多个子表组成,例如 ProjectCodeSamples 就是其中之一...

所以显然要添加一个新的ProjectCodeSample,它需要它所属的ProjectID(作为外键)......那么在AddCodeSample View中,你如何获得那个值,ProjectID的值,以便你可以把它放在一个隐藏的字段中并通过它吗?

这是 ProjectCodeSample 模型:

namespace ProDevPortMVC3
{
    using System;
    using System.Collections.Generic;

    public partial class ProjectCodeSample
    {
        public int ProjectCodeSampleID { get; set; }
        public int ProjectID { get; set; }
        public string ProjectCodeSampleContent { get; set; }
        public string ProjectCodeSampleDescription { get; set; }

        public virtual Project Project { get; set; }
    }
}

这是我的 AddCodeSample 的两个控制器操作方法:

//
// GET: /Project/AddCodeSample

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

//
// POST: /Project/AddCodeSample

[HttpPost]
public ActionResult AddCodeSample(ProjectCodeSample projectcodesample)
{
    projectcodesample.ProjectCodeSampleContent = projectcodesample.ProjectCodeSampleContent.TrimStart();

    if (ModelState.IsValid)
    {
        db.ProjectCodeSamples.Add(projectcodesample);
        db.SaveChanges();
        return RedirectToAction("Details/" + projectcodesample.ProjectID);
    }
    else
    {
        return View(projectcodesample);
    }
}

这是我的 AddCodeSample 视图:

@model ProDevPortMVC3.ProjectCodeSample

@{
    ViewBag.Title = "Add Code Sample";
}

<style type="text/css">
    .editor-label { width: 200px; }
    .editor-field { width: 700px; }
    .submit-button-row { width: 900px; }
    .bottom-nav { width: 900px; }
</style>

<h2>Add Code Sample</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 style="float: left; width: 900px;">
        <legend>Project Code Sample</legend>
        @Html.HiddenFor(model => model.ProjectID)
        <div class="display-editor-label-field-row">
            <div class="editor-label">
                @Html.LabelFor(model => model.ProjectCodeSampleDescription, "Code Sample Description")
            </div>
            <div class="editor-field">
                @Html.TextAreaFor(model => model.ProjectCodeSampleDescription, 4, 85, null)
                @Html.ValidationMessageFor(model => model.ProjectCodeSampleDescription)
            </div>
        </div>
        <br />
        <div class="display-editor-label-field-row">
            <div class="editor-label">
                @Html.LabelFor(model => model.ProjectCodeSampleContent, "Code Sample")
            </div>
            <div class="editor-field">
                @Html.TextAreaFor(model => model.ProjectCodeSampleContent, 15, 85, null)
                @Html.ValidationMessageFor(model => model.ProjectCodeSampleContent)
            </div>
        </div>
        <br />
        <div class="display-editor-label-field-row">
            <div class="submit-button-row">
                <input type="submit" value="Save" />
            </div>
        </div>
        <br />
        <div class="bottom-nav">
            @Html.ActionLink("Cancel", "Details", new { id = ViewContext.RouteData.Values["ID"] })
        </div>
    </fieldset>
}

所以显然这不起作用,因为“@Html.HiddenFor(model => model.ProjectID)”将是空的......所以我做错了什么,你如何获得父 ID 以便你可以制作子条目?

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    您可以使用链接中的查询字符串将上一页的 id 传递到此页:

    public ActionResult AddCodeSample(int id)
    {
        var m = new ProjectCodeSample();
        m.ProjectID = id;
        return View(m);
    }
    

    所以在你的“父”项目页面上,它可能有一个这样的链接:

    <a href="/addcodesample?id=2">Add Code Sample</a>
    

    【讨论】:

    • 再次感谢您,实际上由于我的 Parent ==> Project 页面属于 Project Model,我可以像这样进行链接:“@Html.ActionLink("Add New Code Sample", "AddCodeSample", new { id = Model.ProjectID })"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多