2015-06-01 34 views
0

我在尝试修改活动编辑页面,以便可以涉及更多信息。 为了简化,我有以下几点。在Post方法编辑页面中处理查看模型

型号

public class Activity 
{ 
    public int ActNo { get; set; } 
    public string ActName { get; set; } 
    public virtual ICollection<Attendance> Attendances { get; set; } 
} 

public class Attendance 
{ 
    public int ActNo { get; set; } 
    public string StudentID { get; set; } 
    public virtual Activity Activities { get; set; } 
    public virtual Student Students { get; set; } 
} 
public class Student 
{ 
    public string StudentID { get; set; } 
    public string EnglishName { get; set; } 
    public virtual ICollection<Attendance> Attendances { get; set; } 
} 

在编辑页面,我想显示学生信息(包括那些没有出席相关记录),以及。所以我有一个ViewModel。

public class ActivityEditView 
{ 
    public Activity SelectedActivity { get; set; } 
    public Student Students { get; set; } 
} 

查看

@model <projectname>.ViewModels.ActivityEditView 
@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     @Html.HiddenFor(model => model.SelectedActivity.ActNo) 

     <div class="form-group"> 
      @Html.LabelFor(model => model.SelectedActivity.ActName, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.SelectedActivity.ActName, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.SelectedActivity.ActName, "", new { @class = "text-danger" }) 
      </div> 
     </div> 
     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Save" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 

我改变model.ActNo和model.ActName到model.SelectedActivity.ActNo和model.SelectedActivity.ActName

控制器

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit([Bind(Include = "ActNo,ActName")] Activity activity) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Entry(activity).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(activity); 
    } 

现在一切正确显示但我无法更新信息。 db.SaveChanges()发生错误。

存储更新,插入或删除语句影响了意外数量的行(0)。自实体加载后,实体可能已被修改或删除。

我不知道如何更新控制器部分的代码。有任何想法吗?

回答

0

您需要修改您的类(活动)如下指定绑定属性:

[Bind(Include = "ActNo,ActName")] 
public class Activity 
{ 
    public int ActNo { get; set; } 
    public string ActName { get; set; } 
    public virtual ICollection<Attendance> Attendances { get; set; } 
} 

然后在POST操作,你需要通过视图模型的实体这是类型(ActivityEditView):

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit(ActivityEditView activityEdit) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Entry(activityEdit.SelectedActivity).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(activity); 
    } 
+0

它的工作!谢谢!! – pk028382

0

您可能会绑定到null。尝试:

[Bind(Prefix = "SelectedActivity")]Activity activity 
相关问题