2011-12-02 93 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> 

我想,你想,应该让你: - )