2009-11-23 62 views
1

我有一個使用它傳遞一個頁面名的get操作方法一個操作方法的網站。在action方法中,它通過pagename找到模型項並將相關的東西返回給視圖。ASP.Net MVC - 合併模型和的FormCollection到對象傳遞給視圖

我現在已經創建了一個POST操作方法,因爲我需要它在我的聯繫人頁面。我仍然需要通過頁面名稱查找模型並將其返回給視圖,但是當用戶提交聯繫人信息時,我會在我的查詢模型項目上執行TryUpdateModel,如果無效,它會將錯誤返回到模型狀態,並且驗證摘要顯示錯誤,但是他們提交的信息都沒有重新呈現。

反正我有可以返回頁面模型,並獲得文本框重新呈現什麼時候模型沒有他們以前輸入的?

回答

0

以下是我們所做的事情(刪除此問題並非必不可少的東西):

private ModelType UpdateModel(Guid id) 
{ 
    var dbData = (from m in Repository.SelectAll() 
        where m.Id == id 
        select new ModelType 
        { 
         Id = m.Id, 
         Data = m.Data 
        }).First(); 
    return UpdateModel(dbData); 
} 

private ModelType UpdateModel(ModelType model) 
{ 
    //add other data for view: 
    model.SelectStuff = new SelectList(//... 
    // etc. 
    return model; 
} 

[HttpGet] 
public ActionResult Update(Guid id) 
{ 
    return View(UpdateModel(id)); 
} 

[HttpPost] 
public ActionResult Update(ModelType model) 
{ 
    if (!ModelState.IsValid) 
    { 
     return View(UpdateModel(model)); 
    } 
    // else post to repository 
} 
0

如果添加屬性爲什麼應該被綁定到文本視圖模式(在我的例子Thing),你可以使用類似:

<%=Html.TextBox("Thing", Model.Thing != null ? Model.Thing : string.Empty) 

善良,

+0

我試圖避免從我的數據庫模型視圖模型獨立的,但我想這就是唯一可用的方法 – Jon 2009-11-23 13:49:22

+0

我認爲你是對的;在這種情況下你將需要一個視圖模型。善良,丹 – 2009-11-23 13:53:29

0

我工作了,我可以用下面的辦法:

<input name="ENQ.Name" class="inputText" type="text" maxlength="150" title="Please enter your name" value="<%= ViewData.ModelState["ENQ.Name"] != null ? ViewData.ModelState["ENQ.Name"].Value.AttemptedValue : "" %>" /> 
相關問題