2012-03-07 109 views
0

我在我的DB中有2个表:“竞赛”和“CompetitionAnswers”。每场比赛总会有3个答案。我希望能够为相同的观点编辑Competition和CompetitionAnswers。我设法获取视图通过编辑模板更新实体框架中的子表

所以这是我的编辑模板的工作:

@ModelType golfbug.Answer 

<div class="editor-label left"> 
Answer:<br /> 
</div> 
<div class="editor-field right"> 
@Html.HiddenFor(Function(model) model.CompetitionID) 
@Html.HiddenFor(Function(model) model.CompetitionAnswersID) 
@Html.EditorFor(Function(model) model.CompetitionAnswer) 
</div> 
<div class="clear"></div> 

这是我的看法

@ModelType golfbug.Competition 

@Code 
ViewData("Title") = "Edit" 
End Code 

<h2>Edit</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>Competition</legend> 

    @Html.HiddenFor(Function(model) model.CompetitionID) 

    <div class="editor-label left"> 
     @Html.LabelFor(Function(model) model.ClientID, "Client") 
    </div> 
    <div class="editor-field right"> 
     @Html.DropDownList("ClientID", String.Empty) 
     @Html.ValidationMessageFor(Function(model) model.ClientID) 
    </div> 
    <div class="clear"></div> 
    <div class="editor-label left"> 
     @Html.LabelFor(Function(model) model.StartDate) 
    </div> 
    <div class="editor-field right"> 
     @Html.EditorFor(Function(model) model.StartDate) 
     @Html.ValidationMessageFor(Function(model) model.StartDate) 
    </div> 
     <div class="clear"></div> 
    <div class="editor-label left"> 
     @Html.LabelFor(Function(model) model.CompetitionName) 
    </div> 
    <div class="editor-field right"> 
     @Html.EditorFor(Function(model) model.CompetitionName) 
     @Html.ValidationMessageFor(Function(model) model.CompetitionName) 
    </div> 
     <div class="clear"></div> 
    <div class="editor-label left"> 
     @Html.LabelFor(Function(model) model.CompetitionDetails) 
    </div> 
    <div class="editor-field right"> 
     @Html.EditorFor(Function(model) model.CompetitionDetails) 
     @Html.ValidationMessageFor(Function(model) model.CompetitionDetails) 
    </div> 
     <div class="clear"></div> 
    <div class="editor-label left"> 
     @Html.LabelFor(Function(model) model.CompettionQuestion) 
    </div> 
    <div class="editor-field right"> 
     @Html.EditorFor(Function(model) model.CompettionQuestion) 
     @Html.ValidationMessageFor(Function(model) model.CompettionQuestion) 
    </div> 
    <div class="clear"></div> 

    @Html.EditorFor(Function(model) model.Answers) 



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

<div> 
@Html.ActionLink("Back to List", "Index") 
</div> 

当我打的保存按钮,我需要控制器更新答案表中的答案。目前,我只拥有由Visual Studio生成的代码。我想我必须循环回答并更新它们,但我不知道如何执行此操作。

这里是我的控制器代码:

Function Edit(competition As Competition) As ActionResult 
     If ModelState.IsValid Then 

      db.Competitions.Attach(competition) 
      db.ObjectStateManager.ChangeObjectState(competition, EntityState.Modified) 

      db.SaveChanges() 

      Return RedirectToAction("Index") 
     End If 

     ViewBag.ClientID = New SelectList(db.Clients, "ClientID", "ClientName", competition.ClientID) 
     Return View(competition) 
    End Function 

任何帮助,将不胜感激。我一直在Google上搜索了2天。

回答

0

当你检查competition.Answers,你看到在该属性的价值?如果是这样,你将不得不像这样手动添加它们:

db.Answers.Add(competition.Answers [0]);

此外,检查用信息这个环节上附加和添加

Entity Framework 4 - AddObject vs Attach

既然你说comptetitions总会有3个答案之间的差异, 这里是一个替代的解决方案: 当你创建是“比赛”,您可以创建3个CompetitionAnswers(带有标记为未答复的标志)。然后,你的编辑代码应该工作得很好。

+0

我以为db.Answers.Add(competition.Answers [0]);如果你正在创建一个新的记录被使用。这些记录已经存在于数据库中。在我的编辑功能中,我可以循环查看答案并可以看到它们的值。 – 2012-03-08 07:11:08