我一直在观看相当多的YouTube视频,试图学习如何在MVC 5中编码。我没有ASP.NET编码经验,所以这是一个相当大的挑战。
我没有遇到太多问题,但我似乎无法解决这个问题:
我有一个具有以下属性的客户端模型: Id(PK) 名称 平衡
具有以下属性的付款模型: Id(PK) 日期 量 ClientId(FK)
在我的客户的索引方法中,我只显示一个客户列表。在每个客户端旁边,都有通常的“查看,编辑,删除”选项,但我还添加了“添加付款”,它从付款控制器调用Create方法并将ClientId作为参数发送: @ Html.ActionLink(“添加付款”,“创建”,“付款”,新{id = item.Id},null)
现在出现了问题。如何使付款的Create方法接收该ClientId整数并将其传递给模型,这样我就不必在Payment / Create方法的视图中再次手动选择ClientId。
我知道如何从View中删除下拉列表,但它默认只发送0作为ClientId。我希望它在客户的索引视图中单击“添加付款”操作链接时使用我发送的ClientId。
我创建付款的方法是默认生成的方法:
public ActionResult Create()
{
ViewBag.ClientId = new SelectList(db.Clients, "Id", "Name");
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Date,Amount,ClientId")] Payment payment, int id)
{
if (ModelState.IsValid)
{
db.Payments.Add(payment);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ClientId = new SelectList(db.Clients, "Id", "Name", payment.ClientId);
return View(payment);
}
当我将“int Id”作为参数添加到第一个create方法时,我只是得到了一堆错误。我只是一无所知,并没有找到任何资源来帮助解决我的问题。任何帮助都表示赞赏(即使它是一个可以指导我正确方向的链接)。
答案 0 :(得分:1)
只需将ClientId
传递给模型并存储在HiddenField中,即可使用相同的Payment
类:
public ActionResult Create()
{
Payment payment = new Payment();
payment.ClientId = 394;
return View(payment);
}
[HttpPost]
public ActionResult Create(Payment payment)
{
//Payment.ClientId will be available here
return View();
}
并在视图中:
@model MvcApplication1.Models.Payment
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm("Create", "Pay", FormMethod.Post))
{
@Html.HiddenFor(p => p.ClientId);
<button type="submit">submit</button>
}
答案 1 :(得分:0)
我的朋友终于回复了我的电子邮件并帮我解决了这个问题。
我刚刚将HttpGet方法更改为以下内容:
public ActionResult Create(int id)
{
var payment = new Payment() { ClientId = id };
return View(payment);
}
在我的视图中,我将@ Html.LabelFor(由MVC生成的整个div标记)更改为以下内容:
@Html.HiddenFor(model => model.ClientId)
希望这可以帮助其他人解决同样的问题!