我不确定使用session或tempdata是否对这个问题很有用,或者即使它不知道如何做到这一点。 (仍然掌握着使用asp.net的MVC)。
基本上在我的第一个视图中称为付款视图,我有许多字段供用户填写以捐赠给特定的慈善机构。现在为了将其添加到数据库并完成捐赠,我将创建一个确认页面,它将传输所有数据并在确认页面上显示不可编辑的文本格式,并提供用户给出的所有信息在我创建的领域。在确认页面上,我想要一个名为"编辑"的按钮。这将允许用户返回到他们插入的数据仍然存储的支付页面,但只需单击输入字段即可修改。我认为使用session或tempdata是最好的,但我很困惑,好像我使用它,当用户点击最后确认页面上的捐赠时,是否会重新启动网站?如清除所有保存的数据。这就是我要的。我想要一种方法,允许用户通过点击"编辑"来编辑存储的当前数据。在不同的视图上,并能够在付款视图上修改它。
付款方式
@model CharitySite.Models.Payment
....
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
....
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
<h1>@ViewBag.Name</h1>
<label> Full Name:</label>
<input type="text" id="fullname" name="user_name" />
<label> Amount:</label>
<input type="text" id="ammount" name="user_ammount" />
<label>Comment:</label>
<input type="text" id="comment" name="user_comment" />
<br /><br />
@Html.LabelFor(model => model.CardName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CardName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.CardName, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CardNumber, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CardNumber, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.CardNumber, "", new { @class = "text-danger" })
</div>
</div>
.... // more form controls
<input type="submit" value="Create" class="btn btn-default"
}
@Html.ActionLink("Back to List", "Index")
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
付款控制器
public ActionResult Index()
{
return View(db.Payments.ToList());
}
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Payment payment = db.Payments.Find(id);
if (payment == null)
{
return HttpNotFound();
}
return View(payment);
}
// GET: Payments/Create
public ActionResult Payment()
{
var model = new Payment();
model.ValidFrom = DateTime.Now;
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Payment([Bind(Include = "ID,CardName,CardNumber,ValidFrom,Expires,CardSecurityCode,EmailAddress,Address,City,Country,PostCode")] Payment payment)
{
if (ModelState.IsValid)
{
db.Payments.Add(payment);
db.SaveChanges();
ViewBag.Name = TempData["Name"];
ViewBag.Amount = TempData["Amount"];
ViewBag.Comment = TempData["Comment"];
return RedirectToAction("Index");
}
return View(payment);
}
答案 0 :(得分:0)
如果您转储所有代码,我们将无法查明您的问题,所以我会一般性地提到一些方法。
你可以通过两种方式解决这个问题:
您可以将第一页的数据放入查询字符串中,并从服务器进行重定向。仅当数据的大小可管理且对安全性不敏感时,此方法才有效。
如果您有安全敏感信息或只是为了更好的组织,您可以拥有一个额外的模型(数据库中的表),代表一个未完成的交易。