我有一个Create视图,它与表单一起显示一个值。当他们提交时,我希望也有这个价值。
在我的控制器中我有这个:
public ActionResult Create(Guid? id)
{
if (id == null || id == Guid.Empty) return View();
ViewBag.RegistrationVerificationId = id;
var email = (from rv in _db.RegistrationVerification
where rv.RegistrationVerificationId == id
select rv.Email).FirstOrDefault();
ViewBag.Email = email;
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Profile profileModel)
{
if (ModelState.IsValid)
{
var emailValue = @ViewBag.Email;
//...
}
//...
}
我的观点如下:
@model PublicationSystem.Model.Profile
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Profile</h4>
<hr />
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.ProfileId)
<div class="form-group">
@Html.Label("Email Provided", htmlAttributes: new {@class = "control-label col-md-2"})
<div class="col-md-10">
@ViewBag.Email
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Salutation, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Salutation)
@Html.ValidationMessageFor(model => model.Salutation)
</div>
</div>
....
}
在Response和Postback之间存储值的最佳方法是什么?
答案 0 :(得分:2)
Session["email"] = email;
这将存储响应和回发之间的值。如果这是您正在寻找的,请告诉我。
答案 1 :(得分:0)
TempData 可以为您效劳。另一个选择是将它存储在隐藏字段中并在POST时接收它,但你应该知道“坏用户”可以修改它(例如通过浏览器开发人员工具)。
答案 2 :(得分:0)
如果您需要使用视图呈现的值到达POST
您应该将该值添加到模型中(在您的情况下为Profile
)。
如果您需要使用POST保存的值以在下一个视图中加载
如果您使用相同的操作(return View()
),只需预加载模型。
DoStuff();
return View(new Model { MyValue = "foo" });
如果要重定向到其他操作,请使用持久状态,并使用适当的路由参数重定向。
var transactionId = SaveThings();
return RedirectToAction("Confirmation", new {transactionId});
根据您保存信息的方式加载所需的值。如果信息可以保留在路线参数中,甚至更简单。