我正在处理我的“第一个”MVC 3应用程序,并且被以下问题困扰。基本上我有一个联系表单,收集输入并保存到数据库。在列出所有联系人提交的页面上,我希望用户(以后将成为管理员角色)能够从联系人列表页面中选择一个联系人,然后单击“生成客户端”以调用我的ClientController并将此联系人转换为一个客户。 ClientController页面还有一个Create()方法,用于从头开始输入新的Client记录,因此为了避免该方法的复杂性,我尝试创建一个接受contactID作为参数的“Make”操作。
我在联系人列表页面上有以下代码:
@Html.ActionLink("Make Client", "Make", "Client", new { id = item.ID }, null)
客户端控制器如此显示:
[HttpGet]
public ActionResult Create()
{
return View(new Client());
}
//
// GET: /Make
// used for converting a Contact record into a Client
[HttpGet]
public ActionResult Make(int contactID)
{
try
{
var contactModel = _db.Contacts.Single(r => r.ID == contactID);
var clientModel = new Client()
{
FirstName = contactModel.FirstName,
LastName = contactModel.LastName,
<snip> . . . ,
ZipCode = contactModel.ZipCode
};
return View(new Client(clientModel));
}
catch (Exception ex)
{
base.ViewData["Exception"] = "Exception: " + ex.InnerException.ToString();
throw;
}
}
问题是Make(int contactID)中收到的contactID始终为null。我已经能够调整一些东西,通过使用可以为null的int参数调用标准的Create()ActionResult来实现以下工作,但这感觉很好:
[HttpGet]
public ActionResult Create(int? id)
{
if (id == null)
{
return View(new Client());
}
else
{
return (Make(id));
}
}
底线是我可以调用此Create()ActionResult参数不为null,但是当我直接调用Make()时,参数不会传递。 Create()有什么特别之处可以让它起作用吗?
谢谢,我也愿意接受其他选择。
答案 0 :(得分:3)
Make
操作的操作参数称为contactID
,因此在生成此操作的链接时,请使用以下名称:
@Html.ActionLink(
"Make Client",
"Make",
"Client",
new { contactid = item.ID },
null
)
在调用Make
操作时,这将成功传递正确的值作为参数。因此,您不再需要Create
操作中的调整。