2011-12-02 95 views
1

選擇賬戶持有人後,我想預先填充我的訂單創建視圖和所選賬戶的屬性。預先填充創建視圖

我的控制器行動至今:

[HttpPost] 
    public ActionResult Create(FormCollection values) 
    { 
     var accountHolder = from a in unitOfWork.AccountHolderRepository.Get(includeProperties: "AccountHolder") 
          where a.CustSName == values["Name"] 
          select a; 

     foreach (var a in accountHolder) 
     { 
      ViewBag.CustFName = a.CustFName; 
      ViewBag.CustSName = values["Name"]; 
      ViewBag.CustPhone = a.CustPhone; 
      ViewBag.CustEmail = a.CustEmail; 
     } 

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

回答

0

不知道如果我理解正確什麼是你想在這裏完成。我假設:

  1. 顯示空創建形式
  2. 用戶提供帳戶持有價值(自動提交會怎樣?)
  3. 將返回預填表格
  4. 最後一步創建保存值數據庫

對嗎?

如果是這樣,實例化你使用你創建表單模型/視圖模型(你使用強類型的看法吧?),並返回它是這樣的:

return View(yourobject); //Assuming the first view returned by GET request to Create action has all the properties in place 

然而只有當要發生值是缺失的,正確的。因此您可能需要向控制器添加更多邏輯以驗證是否需要pre-popullation或db.Save()。

0

當您將RedirectToAction調用到訂單控制器時,我假設您現在處於accountholderController的Create方法中?

究竟是什麼問題?沒有具體細節,我不能給你太多幫助。

的一些注意事項,但:

嘗試搜索基於其在數據庫中,而不是名稱ID帳戶持有。您現在信任您的最終用戶輸入完全按照在數據庫中輸入的帳戶名稱(相同大小寫,相同標點符號)。 ID更精確,需要更少的努力來獲得正確的結果。

爲什麼使用Post-Create方法,如果您只想從列表中選擇一個賬戶持有人,然後打開一個Create視圖?在你的主頁上有一個包含所有賬戶持有者的下拉列表(或者任何你想放置它的地方)是明智的。沿線的東西

<select name="accountholderID"> 
    <option value:"ID_of_accountholder">Name_of_accountholder</option> 
    ... 
</select> 

添加按鈕旁邊的按鈕。一旦選擇了一個賬戶並點擊了按鈕,在OrderController中調用你的(Get,not Post)Create方法。將accountholderID作爲參數傳遞。您創建methoud應該是這樣的:

public ActionResult Create(string accountholderID) 
{ 
    int ID = Convert.ToInt32(accountholderID); 

    ViewData["Accountholder"] = database.tbl_Accountholders.SingleorDefault(x=> x.Id == ID); 

    ... 

而在你創建視圖只是訪問帳戶持有的價值觀,像這樣:

<% var accountholder = (accountholdertype)ViewData["Accountholder"]; %> 

<span> Name is <%: accountholder.Name %> </span> 

我想,你想,應該讓你: - )