2016-11-10 108 views
0

我正在學習用於創建Web應用程序的ASP.NET MVC。更改視圖模板

我有2種型號:fooAfooB(具有型fooA的屬性)。 控制器查看自動生成。

現在,我想做的變化不大創建fooB的觀點

  • 如果有fooA則會顯示正常的下拉菜單的條目;
  • 如果沒有fooA的條目然後會出現一個按鈕與以下行爲:
    • 保存剩餘的輸入數據;
    • 重定向到fooA創建視圖;
    • 重定向回fooB創建視圖恢復數據。

我希望我沒有很好地解釋。

我的問題從問題開始:我應該在視圖還是控制器「一側」進行這種更改?那我該怎麼做呢?

謝謝。

+0

好,你可以在View中使用Razor或jQuery來完成,它依賴於提供一些源代碼。 – Carlos28

+0

我沒有包含源代碼,因爲它幾乎是由Visual Studio創建的模板。 – nervousDev

回答

0

從你的描述,我認爲這是你想要的。當用戶導航到包含fooB的視圖時,如果有數據,則顯示drop-down list。如果沒有,請嘗試爲drop-down list創建數據。這是我的建議。

  1. 當用戶瀏覽到包含fooB視圖,只顯示drop-down list(即使是空的),以及一個名爲Add(或任何你想要的)旁邊的按鈕就可以了。
  2. 當用戶單擊Add時,將顯示一個彈出窗口,其中包含必要字段以提取drop-down list的數據。
  3. 當用戶點擊Create時,只需撥打Ajax調用服務器來創建數據。然後,顯示成功或失敗消息,並根據需要刷新drop-down list以獲取新數據。

通過這樣做,您不必在頁面之間前後重定向,並嘗試通過重定向過程來維護數據。

我希望你明白我的意思。如果您發現任何不清楚的事情,請隨時留下問題。

+1

我知道這樣會更容易。問題是,我需要重定向到「創建視圖」並重新導回恢復的數據。這是一個要求。謝謝。 – nervousDev

0

所以,如果你知道,如果有fooA的條目時,頁面加載,它不會改變,那麼你可以簡單的使用剃刀if語句進行CSHTML文件:

@if (fooA != null) 
{ 
    ...code with dropdown... 
} 
else 
{ 
    ...code with button... 
} 

Sample

這是你要找的嗎?

+0

我知道。我的問題是「按鈕操作」。我需要執行一系列步驟:保存數據,轉到頁面,使用恢復的數據重定向。謝謝! – nervousDev

+1

那麼也許可以使用Bootstrap modal作爲fooA編輯器(http://v4-alpha.getbootstrap.com/components/modal/)? – Carlos28

0

看到一些評論,並且必須在單獨的視圖中創建「fooA」這一事實。實際上,這將需要視圖和控制器更改,但是您需要的大部分操作都將在控制器操作中進行。

有幾十這個選項,但我這是我想借此(所以把它當作一粒鹽)路線:

  • 有一個MyController.CreateFooB動作,這是你的標準[HttpPost]行動創建fooB模型時fooA不需要創建
  • 有一個MyController.CreateFooBAndRedirectToFooA,這也是一個[HttpPost]
    • 這一行動將需要fooB視圖模型作爲參數,並會在你的databa創建模型SE或存儲設備
    • 創建模型後,redirec到MyController.CreateFooA是一個[HttpGet]行動,以及FooB模型的ID傳遞給動作(可以執行用戶提交到MyController.CreateFooA背部
    • 後重定向方式他們[HttpPost],創建模型A和執行另一重定向到MyController.EditFooB使用戶可以綁定新的FooA到FooB

你如何實現EditFooB取決於你(傳遞A的ID並將其放入更新表單中,迫使用戶將其從下拉列表中選出)等等。但最終與你所描述的工作流程,你需要做一個後創建乙 - >重定向創建一個 - >後創建一個 - >重定向到更新乙