从不同的视图中检索数据

时间:2016-03-13 00:03:35

标签: c# asp.net-mvc

我不确定使用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);
}

1 个答案:

答案 0 :(得分:0)

如果您转储所有代码,我们将无法查明您的问题,所以我会一般性地提到一些方法。

你可以通过两种方式解决这个问题:

  1. 您可以将第一页的数据放入查询字符串中,并从服务器进行重定向。仅当数据的大小可管理且对安全性不敏感时,此方法才有效。

  2. 如果您有安全敏感信息或只是为了更好的组织,您可以拥有一个额外的模型(数据库中的表),代表一个未完成的交易。