2012-12-04 80 views
1

我有以下情形的web應用程序:MVC 3通模型而不使用HTML表單(提交)或JSON

用戶註冊的公司,對於該予加載公司創建視圖。

在創建頁面中,我有一個公司聯繫人下拉列表。最初這個列表是空的,用戶可以點擊一個創建按鈕來創建一個新地址。

這會爲聯繫人加載部分視圖(如JQuery彈出窗口)。在用戶創建新的聯繫人後,視圖返回到公司註冊視圖。公司註冊視圖必須在下拉框中使用新添加的聯繫人進行刷新。它還必須保留任何已經輸入的數據。

以下與我的情況相同,但由於設計限制,我無法使用JSON。 How to pass the full Model from view to controller via jquery in a MVC c# application

我的問題:有沒有什麼辦法可以將整個模型存儲到會話視圖中,以便在控制器中使用?

我試過如下:

 <div class="editor-label"> 
      @Html.LabelFor(model => model.CompanyName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.CompanyName) 
      @Html.ValidationMessageFor(model => model.CompanyName) 

      @Session.Add("CompanyName",Model.CompanyName) 
     </div> 

由於這是無效的,它不返回一個值,而無法呈現。

所以,我想通過模型作爲參數傳遞給控制器​​,但它一直被空:

public ActionResult CreateContactPerson(ManagementAgencyViewModel viewModel) 
    { 

     if(HttpContext.Session != null) 
      HttpContext.Session.Add("MaObject",viewModel); 

     return RedirectToAction("Create", "ContactPersons"); 
    } 

使用一個ActionLink的調用公司控制器名爲「ManagementAgencies」:

@Html.ActionLink(@ViewResources.Link_New_ContactPerson, "CreateContactPerson",   "ManagementAgencies", null, new { @class = "openDialog ui-button ui-state-default ui-corner-all", data_dialog_id = "createDialog", data_dialog_title = @ViewResources.DialogTitle_CreateNew }) 

有沒有其他方法可以存儲在Session中,而不使用隱藏字段或JSON? 如果是這樣,從視圖內將模型值存儲到會話中的正確方法是什麼?

+0

當您說'JSON'時,您的意思是您不能使用$ .ajax將值發佈到CreateContactPerson? –

回答

1

請記住,渲染視圖時服務器標籤會執行。當代碼:

@Session.Add("CompanyName",Model.CompanyName) 

執行時,Model.CompanyName沒有值,因爲呈現的視圖正在發送到用戶的Web瀏覽器。讓該位置的代碼從字面上將其設置爲CompanyName的默認值(可能在此時爲空)。

稍後,用戶將表單提交給您的操作,您在CreateContactPerson中定義的viewModel變量將填充用戶的值。此時,您可以將該值保存到會話中。 只需將會話保存代碼設置爲您的操作並且您應該很好。

+0

服務器標籤的確有用,應該知道的。但是,在CreateContactPerson中聲明的ViewModel在什麼時候被填充?因爲當Action鏈接指向CreateContactPerson方法時,viewModel在該時間點仍然爲空。我想我的問題是,如果使用「submit」,viewModel是否僅從客戶端傳遞過來? –