2012-02-06 49 views
0

因此,在一對多關係數據庫結構化應用程序中,您當然需要能夠爲父項添加多個子條目...因此,假設您有一個用戶,並且該用戶可以擁有一個配置文件,但每個配置文件可以有多個項目,當然項目由多個子表格組成,例如ProjectCodeSamples,就是其中之一...在MVC 3 w/razor中添加子條目時獲取父模型ID?

因此顯然要添加一個新的ProjectCodeSample,它需要它所屬的ProjectID (作爲外鍵)...因此,在AddCodeSample視圖中,您如何獲得該值,即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,這樣你就可以讓孩子入門?

回答

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> 
+0

你說得對,那個工作,非常感謝你... – 2012-02-07 00:09:13

+0

再次感謝你,實際上,因爲我的父==>項目頁是項目模型,我能夠做到這樣的鏈接:「 @ Html.ActionLink(「Add New Code Sample」,「AddCodeSample」,new {id = Model.ProjectID})「 – 2012-02-07 00:19:23