预填充创建视图

时间:2011-12-02 10:49:26

标签: asp.net-mvc-3 controller

选择帐户持有人后,我想使用所选帐户持有人的属性预先填充订单创建视图。

到目前为止我的控制器操作:

    [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");
    }

2 个答案:

答案 0 :(得分:0)

不确定我是否正确理解你想在这里完成什么。我假设:

  1. 显示空的创建表单
  2. 用户为AccountHolder提供价值(自动提交是否发生?)
  3. 您返回预先填充的表单
  4. 最终创建步骤以保留数据库值
  5. 我是对的吗?

    如果是这样,请在创建表单中实例化您正在使用的模型/视图模型(您正在使用强类型视图吗?)并将其返回如下:

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

    然而,只有在缺少值时才会发生这种情况。因此,您可能希望向控制器添加更多逻辑,以验证是否需要pre-popullation或db.Save()。

答案 1 :(得分:0)

当您将RedirectToAction调用到Order控制器时,我假设您现在处于accountholderController的Create方法中?

你的问题到底是什么?没有具体细节,我无法给你太多帮助。

但有些注意事项:

尝试根据数据库中的ID而不是名称来搜索帐户持有者。您现在信任您的最终用户输入与在数据库中输入完全相同的帐户持有人姓名(相同的情况,相同的标点符号)。 ID更精确,需要更少的努力才能正确。

为什么要使用Post-Create方法,如果您只想从列表中选择一个帐户持有人,然后打开创建视图?拥有一个包含主页上所有账户持有人的下拉列表(或者你想把它放在哪里)会更明智。

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

在旁边添加一个按钮。选择一个帐户持有人并单击该按钮后,在OrderController中调用您的(Get,而不是Post)Create方法。将accountholderID作为参数传递。你的创建方法应该是这样的:

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>

我认为应该让你到达你想去的地方: - )