我正在開發一個註冊流程,用戶來到並填寫5頁來完成一個過程。我決定有多個視圖和一個控制器以及一個ProcessNext操作方法,以便一步一步地進行。每次Process Next被調用時,它都會獲得原始視圖和下一個視圖。由於每個視圖都與自己的視圖模型相關聯,所以我創建了一個基本視圖模型,這些模型都查看從中派生的特定視圖模型現在的問題是,鑄造拋出異常。這裏是示例代碼ASP.NET MVC投影BaseViewModel到DerivedViewModel
基礎視角模式
public class BaseViewModel
{
public string viewName;
}
個人視圖模型
public class PersonalViewModel : BaseViewModel
{
public string FirstName;
// rest properties comes here
}
Index.cshtml
@Model PersonalViewModel
@using (Html.BeginForm("ProcessNext", "Wizard", FormMethod.Post, new { class = "form-horizontal", role = "form" }))
@Html.TextBoxFor(m => m.FirstName, new { @class = "form-control" })
<input type="submit" class="btn btn-default" value="Register" />
基本上,我在這裏綁定PersonalViewModel的視圖
現在在Controller ProcessNext中,Action方法看起來像這樣。
public ActionResult ProcessNext(BaseViewModel viewModelData)
{
PersonalViewModel per = (PersonalViewModel) viewModelData;
}
這是失敗,拋出一個類型的情況下例外,爲什麼?..
我的想法是隻使用一個動作的方法來改變這一切派生視圖模型,併發送至一個共同的類驗證和處理。請幫我解決這個問題..謝謝!
因爲'viewModelData'不是'PersonalViewModel'您不能將基類型轉換爲派生類型。在任何情況下,這可能無法正常工作,因爲您發回'BaseViewModel'因此與'PersonalViewModel'相關的所有內容都會丟失。 –
在基本的oops ..我很好的情況下派生的基類類型..對嗎?..那麼可以在這裏做什麼來得到這個工作?任何瘋狂的猜測? – user2066540
在第一步,你回發到'public ActionResult Step1(PersonalViewModel模型)'保存數據,然後重定向到一個GET方法,該方法呈現你的'Step2ViewModel'視圖,並返回到'public ActionResult Step2(Step2ViewModel模型)'等在BaseViewModel中沒有任何意義,除了可能包含所有步模型共有的ID屬性 –