选择帐户持有人后,我想用所选帐户持有人的属性预填充订单创建视图。
My Controller Action so far:
[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");
}
不确定我是否理解正确,你想在这里完成什么。我假设:
- 显示空创建表单
- 用户为accounholder提供值(自动提交吗?)
- 返回预填充的表单
- 最终创建步骤保存值到数据库
我说的对吗?
如果是这样,实例化你在创建表单中使用的模型/视图模型(你正在使用强类型视图对吗?),并像这样返回它:
return View(yourobject); //Assuming the first view returned by GET request to Create action has all the properties in place
但是,只有当值丢失时才会发生这种情况,对吧?因此,您可能需要在控制器中添加更多逻辑,以验证是否需要预填充或db.Save()。
当您对Order控制器调用RedirectToAction时,我假设您现在处于accountholderController的Create方法中?
你的问题到底是什么?没有具体细节,我没法给你太多帮助。
一些注意事项:
尝试根据其在数据库中的ID而不是名称搜索帐户持有人。现在,您信任最终用户输入的帐户持有人名称与在数据库中输入的名称完全相同(相同的大小写,相同的标点符号)。ID更精确,需要更少的努力才能正确。
如果你想做的只是从列表中选择一个帐户持有人,然后打开一个创建视图,为什么要使用Post-Create方法?更明智的做法是在主页上(或任何想要放置它的地方)放置一个包含所有帐户持有人的下拉列表。
之类的东西<select name="accountholderID">
<option value:"ID_of_accountholder">Name_of_accountholder</option>
...
</select>
在旁边添加一个按钮。选中帐户持有人并单击按钮后,调用OrderController中的(Get,而不是Post) Create方法。将accountholderID作为参数传递。你的Create方法应该是这样的:
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>
我认为这应该能让你达到你想达到的目标:-)