0

在MVC 3應用程序中,我需要能夠在兩個不同的部分創建視圖,因爲有一些文件夾創建邏輯。在第一個視圖中我有一個帶有項目名稱的文本框,單擊我需要的下一個按鈕爲該項目創建文件夾,並且我需要一種方法以某種方式在我的下一個視圖上獲取該項目名稱文件夾。現在我按下,我鬆了項目名稱,我不能再次得到它。 在互聯網上有很多地方他們以同樣的方式實施它,但我無法弄清楚如何做到這一點。MVC presistent模型

如何建立模型的任何解決方案?

回答

2

您可以在第二個視圖中使用隱藏字段,該字段將包含在第一個視圖中輸入的項目名稱。這樣,當你提交第二個表單時,你將得到項目名稱和項目文件夾。

另一種可能性是存儲在第一視圖中輸入某個服務器上的值(數據庫,會話,...)


UPDATE:

正如在評論部分要求這裏是一個使用隱藏字段的例子。

第一視點:

@model FirstStepViewModel 
@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x => x.ProjectName) 
    <button type="submit">OK</button> 
} 

然後控制器動作,其第一步將提交:

[HttpPost] 
public ActionResult Foo(FirstStepViewModel model) 
{ 
    if (!ModelState.IsValid) 
    { 
     return View(model); 
    } 

    return RedirectToAction("Bar", new { projectname = model.ProjectName }); 
} 

,然後你就會有第二個控制器動作,將成爲第二個觀點:

public ActionResult Bar(FirstStepViewModel firstStep) 
{ 
    var model = new SecondStepViewModel 
    { 
     ProjectName = firstStep.ProjectName 
    }; 
    return View(model); 
} 

然後您將有相應的視圖:

@model SecondStepViewModel 
@using (Html.BeginForm()) 
{ 
    @Html.HiddenFor(x => x.ProjectName) 
    @Html.EditorFor(x => x.ProjectFolder) 
    <button type="submit">OK</button> 
} 

將張貼到最終的行動:

[HttpPost] 
public ActionResult Bar(SecondStepViewModel model) 
{ 
    // here you will get both model.ProjectName and model.ProjectFolder 
    ... 
} 
+0

你能舉個例子嗎?如何將項目名稱發送給Hiddenfield? – Timsen 2012-02-10 15:48:00

+0

@蒂姆森,當然,看看我的更新。 – 2012-02-10 15:53:23

0

您也可以加載表格的所有零件一次,然後用一個標籤式佈局(如jQuery UI Tabs),並提交整個形式的最後一步。

+0

當然,如果每一步和大量的字段,這可能會導致一個大的帖子。 – jrummell 2012-02-10 15:49:48