2016-03-13 2 views
0

Я не уверен, что использование этой сессии или tempdata полезно для этой проблемы или даже если я не знаю, как это сделать. (Все еще получаю зависание MVC с asp.net).Извлечение данных из другого представления

В основном на моем первом представлении, которое называется видом оплаты, у меня есть много полей, которые пользователи заполняют, чтобы пожертвовать определенной благотворительности. Теперь, чтобы это было добавлено в базу данных и завершено пожертвование, я создам страницу подтверждения, которая будет передавать все данные и отображать неизменяемый текстовый формат на странице подтверждения, предоставляя всю информацию, предоставленную пользователем в полях, которые я создал. На странице подтверждения я хотел бы нажать кнопку «Изменить», которая позволит пользователю вернуться на страницу оплаты, где данные, которые они вставили, все еще хранятся, но могут быть изменены простым нажатием на поля ввода , Я думаю, что использование сеанса или tempdata лучше всего подходит для этого, но я довольно смущен, как будто я использую это, когда пользователь щелкает пожертвовать на странице окончательного подтверждения, перезапустит ли сайт? Такие как очистить все сохраненные данные. Это то, чего я хочу. Мне нужен метод, который позволяет пользователю редактировать текущие данные, находящиеся на экране, нажав «Изменить» на другом представлении и способный изменить его в представлении оплаты.

ОПЛАТА VIEW

@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

Пожалуйста, не просто сбрасывайте весь свой нерелевантный код в вопросе. Непонятно, почему вам нужно перенаправить на страницу подтверждения, но если вы это сделаете, то в методе POST-платежей Payments() вам необходимо сохранить данные где-то, желательно в базе данных, но это может быть Session. Затем вам нужно перенаправить на метод 'Confirm()', где вы извлекаете данные и отображаете страницу подтверждения, которая будет включать в себя вашу кнопку подтверждения (которая отправляется в метод 'Confirm()' и ссылку 'Edit', которая перенаправляет обратно на метод 'Create()'. –

ответ

0

Мы не в состоянии точно определить проблему, если вы сбросить весь свой код, поэтому я упомяну некоторые общих путей.

Вы можете идти об этом двумя способами:

  1. Вы можете поместить данные с первой страницы в строке запроса и сделать переадресацию с сервера. Это работает только в том случае, если данные управляемы по размеру и не чувствительны к безопасности.

  2. Если у вас есть секретная информация о безопасности или только для лучшей организации, у вас может быть дополнительная модель (таблица в базе данных), которая представляет собой незавершенную транзакцию.

Смежные вопросы