这是我发布表单的观点:
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { id="frmRegister", @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary("", new { @class = "text-danger" })
<div class="col-md-8">
@Html.TextBoxFor(x => x.Username, new { @class = "form-control form-input", placeholder = "ID" })
@Html.ValidationMessageFor(m => m.Username, "", new { @class = "text-danger" })
</div>
<div class="col-md-8">
@Html.TextBoxFor(x => x.Mail, new { @class = "form-control form-input", placeholder = "Mail" })
@Html.ValidationMessageFor(m => m.Mail, "", new { @class = "text-danger" })
</div>
<div class="col-md-8">
@Html.PasswordFor(x => x.Password, new { @class = "form-control form-input", placeholder = "Parolă" })
@Html.ValidationMessageFor(m => m.Password, "", new { @class = "text-danger" })
</div>
<div class="col-md-8">
@Html.PasswordFor(x => x.ConfirmPassword, new { @class = "form-control form-input", placeholder = "Confirmă parola" })
@Html.ValidationMessageFor(m => m.ConfirmPassword, "", new { @class = "text-danger" })
</div>
<input type="submit" id="btnGetConfCodeView" onclick="ShowConfCodeInput()" style="margin-top: 7px; margin-bottom: -5px" value="Fă-l!" class="btn btn-info" />
<input type="button" id="btnCloseRegister" style="margin-top: 7px; margin-bottom: -5px" value="Las'" class="btn btn-default" />
}
我正在使用该操作存储输入的数据:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public void Register(RegisterViewModel viewModel)
{
if (ModelState.IsValid)
{
var user = new User
{
Username = viewModel.Username,
Mail = viewModel.Mail,
Password = viewModel.Password,
MemberSince = DateTime.Now
};
Session["currentUser"] = user;
}
}
执行此操作后,我将重定向到 / Account / Register 路径。我希望这不会发生,是否可能?
答案 0 :(得分:1)
它将显示空白屏幕,其中包含网址Account/Register
,因为您从HttpPost操作方法返回无效。
理想情况下,您应该使用PRG模式。
POST - REDIRECT-GET
RedirectToAction
方法将302响应发送到浏览器。 / LI>
醇>
所以你的代码将是
[HttpPost]
public void Register(RegisterViewModel viewModel)
{
if (ModelState.IsValid)
{
// to do :Save
return RedirectToAction("SuccesfullyRegistered","Account");
}
return View(viewModel);
}
因此,当用户提交表单时,我们将保存用户并向浏览器发送302响应,浏览器将向Account/SuccessfullyRegistered
操作方法发出请求。
当用户重新加载新视图时,PRG模式可防止重复表单提交问题。
答案 1 :(得分:0)
根据您的评论,您应该使用Ajax Helper或jquery通过ajax提交表单。 Working with Ajax Helper in ASP.NET MVC是使用Ajax Helper的一个很好的教程,在stackoverflow中有很多关于使用jquery提交表单的问题。由你来雇用其中一个。似乎Ajax Helper更容易使用。
答案 2 :(得分:0)
如果您确实要触发并忘记提交表单的POST请求,则可以添加一个不可见的 iframe ,并使表单的 target 属性指向该iframe。然后,对POST的回复的内容将放在那里,并且由于iframe被隐藏,用户将看不到它。
您的iframe定义如下:
<iframe id="nulframe" name="nulframe" style="width:0;height:0;border:0; border:none;" />
,您可以将target属性添加到代码的第一行,如下所示:
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { id="frmRegister", @class = "form-horizontal", role = "form", target = "nulframe" }))
您甚至可以处理iframe的 load 事件,以便在POST完成后得到通知。