自定义形状模型编辑问题

问题描述:

我有一个人表有两个属性:ID,nameID;一个personName表有四个属性:NameID,Firstname,Middlename,Lastname;这里nameID是PersonTable的外键形式PersonName表; (希望你明白我在这里测试多值属性测试。)自定义形状模型编辑问题

然后我做了这两个表的ADO.net数据模型。之后,我做了一个叫NameViewData自定义形状的模型,它看起来像:

public class NameViewData 
{ 
    public Person Person { get; set; } 
    public PersonName Name { get; set; } 

    public NameViewData(Person person, PersonName personName) 
    { 
     Person = person; 
     Name = personName; 
    } 
} 

我创建了一个名字控制器在这里我想用CRUD操作。在这个控制器我写的编辑操作(GET方法)是这样的:

public ActionResult Edit(int id) 
    { 
     Person person = db.Person.First(x=>x.Id == id); 
     PersonName personName = db.PersonName.First(x=>x.NameId == id); 
     return View(new NameViewData(person, personName)); 
    } 

现在的问题是,我不知道怎么写的编辑操作(POST方法),并编辑视图页。我写的是这样的:

编辑观点:

Inherits="System.Web.Mvc.ViewPage<Name.Models.NameViewData> 

<% using (Html.BeginForm()) {%> 

    <fieldset> 
     <legend>Fields</legend> 

     <p> 
      <label for="Name.Firstname">Firstname:</label> 
      <%= Html.TextBox("Name.Firstname", Model.Name.Firstname)%> 
      <%= Html.ValidationMessage("Name.Firstname", "*")%> 
     </p> 
     <p> 
      <label for="Name.Middlename">Middlename:</label> 
      <%= Html.TextBox("Name.Middlename", Model.Name.Middlename)%> 
      <%= Html.ValidationMessage("Name.Middlename", "*")%> 
     </p> 
     <p> 
      <label for="Name.Lastname">Lastname:</label> 
      <%= Html.TextBox("Name.Lastname", Model.Name.Lastname)%> 
      <%= Html.ValidationMessage("Name.Lastname", "*")%> 
     </p> 
     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 

<% } %> 

编辑POST:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Edit(int id, FormCollection collection) 
    { 
     Person person = db.Person.First(x=>x.Id == id); 
     PersonName personName = db.PersonName.First(x=>x.NameId == id); 
     NameViewData nameViewData = new NameViewData(person, personName); 
     try 
     { 
      TryUpdateModel(nameViewData); 

      if (ModelState.IsValid) 
      { 
       db.AddToPersonName(nameViewData.Name); 
       db.AddToPerson(nameViewData.Person); 
       db.SaveChanges(); 
      } 

      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

但这不工作。你能帮我解决吗?还有,我应该阅读关于自定义形状视图模型的内容,如果可能,请提供任何链接。

+0

什么是nameViewData的,一旦你被称为TryUpdateModel值 – 2009-11-27 16:03:15

你的“编辑邮报”的行动应该如下:

public ActionResult Edit(int id, NameViewData person) 
{ 
    .... 
} 

你的基本格局似乎确定对我来说,你有你的提交输入到提交表单,但是你没有指定的操作方法等你的表单声明。尝试这样的事情(看看的覆盖,以选择最适合您的情况...

<% using (Html.BeginForm("Edit", "ControllerName", new { id = Model.Person.Id, .... 
+0

是啊 - ?我错过了:-) - 票从我! – Mark 2009-11-27 18:35:29