我有物品控制器和贷款控制器。我在系统中实现了qr代码功能,所以现在当用户进入特定项目的项目/细节时,会自动生成qr,并使用该特定项目的编码URL(Items / Details / id .. 接下来我想要的是当用户被重定向到一个项目的URL时,可以选择" loan"它......"创造新贷款"动作方法放在LoansController中,所以我想知道如何最好地解决问题..? 到目前为止,我所尝试的只是复制/粘贴该操作方法"创建新贷款"来自Items控制器中的LoansController,并在创建新贷款时将id设置为ItemId属性的参数。 但是在我这样做之后,当用户点击一个按钮"贷款"请求进入"创建新贷款" GET请求的动作方法在" ItemsController"然后抛出异常,它是类型为Loan的预期模型而不是Item类型的模型。 我在脑海中想到的另一件事是在LoansController中设置新贷款的重载版本,以便决定何时请求从Loan Controller创建新贷款的正常请求,或者来自具有特定ID的项目/详细信息项目..
我真的希望描述我想要发生的事情: 目前用户可以进入LoansController并使用Create new Loan功能,他可以通过下拉菜单选择哪个项目。 所需的功能是当用户使用qr并被重定向到特定项目页面的项目/详细信息/ id时,可以选择"贷款"它。 新贷款行动方法获得要求:
public ActionResult CreateLoan(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Item item = db.Items.Find(id);
if (item == null)
{
return HttpNotFound();
}
// ViewBag.UserID = new SelectList(db.AspNetUsers, "Id", "Email");
//ViewBag.ItemID = new T(db.Items.Where(x => x.State == true), "ItemID", "Name");
//return RedirectToAction("CreateLoan", "Items", id);
return View(id);
}
和post req。的相同方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateLoan([Bind(Include = "LoanID,ItemID,UserID,DateOut,DateDue,ReturnDate")] Loan loan, int? id)
{
if (ModelState.IsValid)
{
Item item = db.Items.Find(id);
loan.ItemID = (item.ItemID);
loan.UserID = User.Identity.GetUserId();
loan.DateOut = DateTime.Now;
loan.DateDue = loan.DateOut.AddDays(14);
db.Loans.Add(loan);
和get req之后调用的视图。以及请求抛出的地方..
@model WebApplication3.Models.Loan
@using Microsoft.AspNet.Identity
@using Microsoft.AspNet.Identity.EntityFramework
@using WebApplication3.Models;
@{
ViewBag.Title = "CreateLoan";
}
<h2>Create Loan</h2>
<h3>Are you sure you want to create this loan?</h3>
<div>
<h4>Loan</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.DateOut)
</dt>
<dd>
@Html.DisplayFor(model => model.DateOut)
</dd>
<dt>
@Html.DisplayNameFor(model => model.DateDue)
</dt>
<dd>
@Html.DisplayFor(model => model.DateDue)
</dd>
<dt>
@Html.DisplayNameFor(model => model.ReturnDate)
</dt>
<dt>
@Html.DisplayNameFor(model => model.AspNetUser.Email)
</dt>
<dd>
@Html.DisplayFor(model => model.AspNetUser.Email)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Item.Name)
</dt>
<dd>
@Html.DisplayFor(model => model.Item.Name)
</dd>
</dl>
@using (Html.BeginForm())
@Html.AntiForgeryToken()
{
<div class="form-actions no-color">
<input type="submit" value="CreateLoan" class="btn btn-default" /> |
@Html.ActionLink("CreateLoan", "CreateLoan")
</div>
}
</div>
提前谢谢
答案 0 :(得分:0)
视图和控制器在MVC中是完全独立的。所以你可以从任何视图调用任何控制器动作。 因此,从技术上讲,您可以从项目详细信息视图中调用贷款控制器操作,然后获取结果,甚至可以从那里重定向到新视图...... 因此,从“创建贷款”链接的“详细信息”视图中,您可以使用以下内容:
using PayPal.Api;
// Authenticate with PayPal and setup the APIContext object.
var config = ConfigManager.Instance.GetProperties();
var accessToken = new OAuthTokenCredential(config).GetAccessToken();
var apiContext = new APIContext(accessToken)
{
Config = config
};
// Get the payment history
var paymentHistory = Payment.List(apiContext, count: 10, startIndex: 5);