2009-11-27 40 views
0

我有一個人表有兩個屬性: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

回答

0

你的「編輯郵報」的行動應該如下:

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

你的基本格局似乎確定對我來說,你有你的提交輸入到提交表單,但是你沒有指定的操作方法等你的表單聲明。嘗試這樣的事情(看看的覆蓋,以選擇最適合您的情況...

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

是啊 - ?我錯過了:-) - 票從我! – Mark 2009-11-27 18:35:29