ASP.NET MVC 应用首先执行 post 而不是 get
ASP.NET MVC app execute first the post and not the get
我有一个带有 MCV 项目的 Sharepoint 提供商托管应用程序,主页是一个具有 2 个索引操作的应用程序部分,一个获取和一个 post。问题是,在第一个页面加载时,验证发生在用户甚至还没有开始填写表单时,因为它直接转到 post 控制器而不是 get
想法是在索引get中我应该获取视图,而在post中将提交表单。
查看:
@using (@Html.BeginForm("Solicitar", "RegistroDeSolicitudes", FormMethod.Post))
{
@Html.ValidationSummary(true)
<div class="row">
<div class="col-md-8">
@Html.LabelFor(model => model.Cabana, new { @class = "col-xs-6 col-sm-3" })
<div class="col-xs-6 col-sm-3">
<select name="Cabana">
<option value="C1">Cabaña 1</option>
<option value="C2">Cabaña 2</option>
<option value="C3">Cabaña 3</option>
<option value="C4">Cabaña 4</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
@Html.LabelFor(model => model.Cedula, new { @class = "col-xs-6 col-sm-3" })
<div class="col-xs-6 col-sm-3">
@Html.EditorFor(model => model.Cedula)
</div>
<div>@Html.ValidationMessageFor(model => model.Cedula)</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
@Html.LabelFor(model => model.Nombres, new { @class = "col-xs-6 col-sm-3" })
<div class="col-xs-6 col-sm-3">
@Html.EditorFor(model => model.Nombres)
</div>
<div>
@Html.ValidationMessageFor(model => model.Nombres)
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
@Html.LabelFor(model => model.Apellidos, new { @class = "col-xs-6 col-sm-3" })
<div class="col-xs-6 col-sm-3">
@Html.EditorFor(model => model.Apellidos)
</div>
<div>
@Html.ValidationMessageFor(model => model.Apellidos)
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
@Html.LabelFor(model => model.Email, new { @class = "col-xs-6 col-sm-3" })
<div class="col-xs-6 col-sm-3">
@Html.EditorFor(model => model.Email)
</div>
<div>
@Html.ValidationMessageFor(model => model.Email)
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
@Html.LabelFor(model => model.FechaDesde, new { @class = "col-xs-6 col-sm-3" })
<div class="col-xs-6 col-sm-3">
@Html.EditorFor(model => model.FechaDesde)
</div>
<div>
@Html.ValidationMessageFor(model => model.FechaDesde)
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
@Html.LabelFor(model => model.FechaHasta, new { @class = "col-xs-6 col-sm-3" })
<div class="col-xs-6 col-sm-3">
@Html.EditorFor(model => model.FechaHasta)
</div>
<div>
@Html.ValidationMessageFor(model => model.FechaHasta)
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<div class="col-xs-6 col-sm-3" id="stylesheet"></div>
<div class="col-xs-6 col-sm-3">
<input type="submit" name="btnSubmit" />
</div>
</div>
</div>
}
控制器:
public class RegistroDeSolicitudesController : Controller
{
[SharePointContextFilter]
public ActionResult Index()
{
ViewBag.Title = "Registro de Solicitudes";
return View();
}
[HttpPost]
[SharePointContextFilter]
public ActionResult Index([Bind(Include = "Cabana,Cedula,Nombres,Apellidos,Email,FechaDesde,FechaHasta")] Reserva reserva)
{
if (ModelState.IsValid)
{
try
{
var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);
using (var cc = spContext.CreateUserClientContextForSPHost())
{
reserva.Estado = "Pendiente";
Helpers.SaveSolicitud(cc, reserva);
}
HttpContext.Session["PrimeraVez"] = "no";
TempData["UserMessage"] = "Su solicitud ha sido registrada exitosamente";
TempData["AlertClass"] = "alert-success";
}
catch (Exception)
{
TempData["UserMessage"] = "Lo sentimos, ha ocurrido un error. Intenta de nuevo";
TempData["AlertClass"] = "alert-danger";
}
}
ViewBag.Title = "Registro de Solicitudes";
return View();
}
}
型号:
public class Reserva
{
[Display(Name = "Cabaña")]
[StringLength(2, MinimumLength = 2)]
public string Cabana { get; set; }
[Display(Name = "Cédula")]
[Required(ErrorMessage = "Por favor escriba su cédula")]
public int Cedula { get; set; }
[Required(ErrorMessage = "Por favor escriba sus Nombres")]
[StringLength(60, MinimumLength = 3, ErrorMessage = "Por favor escriba un valor válido para este campo")]
public string Nombres { get; set; }
[Required(ErrorMessage = "Por favor escriba sus Apellidos")]
[StringLength(60, MinimumLength = 3, ErrorMessage = "Por favor escriba un valor válido para este campo")]
public string Apellidos { get; set; }
[Required(ErrorMessage = "Por favor escriba un correo electrónico")]
[StringLength(60, MinimumLength = 3, ErrorMessage = "Por favor escriba un correo válido")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[DisplayName("Fecha desde")]
[Required(ErrorMessage = "Por favor escriba una fecha")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime FechaDesde { get; set; }
[DisplayName("Fecha Hasta")]
[Required(ErrorMessage = "Por favor escriba una fecha")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime FechaHasta { get; set; }
public string Estado { get; set; }
}
将您的 return View()
更改为
return RedirectToAction("Index", new { SPHostUrl = SharePointContext.GetSPHostUrl(HttpContext.Request).AbsoluteUri });
我有一个带有 MCV 项目的 Sharepoint 提供商托管应用程序,主页是一个具有 2 个索引操作的应用程序部分,一个获取和一个 post。问题是,在第一个页面加载时,验证发生在用户甚至还没有开始填写表单时,因为它直接转到 post 控制器而不是 get
想法是在索引get中我应该获取视图,而在post中将提交表单。
查看:
@using (@Html.BeginForm("Solicitar", "RegistroDeSolicitudes", FormMethod.Post))
{
@Html.ValidationSummary(true)
<div class="row">
<div class="col-md-8">
@Html.LabelFor(model => model.Cabana, new { @class = "col-xs-6 col-sm-3" })
<div class="col-xs-6 col-sm-3">
<select name="Cabana">
<option value="C1">Cabaña 1</option>
<option value="C2">Cabaña 2</option>
<option value="C3">Cabaña 3</option>
<option value="C4">Cabaña 4</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
@Html.LabelFor(model => model.Cedula, new { @class = "col-xs-6 col-sm-3" })
<div class="col-xs-6 col-sm-3">
@Html.EditorFor(model => model.Cedula)
</div>
<div>@Html.ValidationMessageFor(model => model.Cedula)</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
@Html.LabelFor(model => model.Nombres, new { @class = "col-xs-6 col-sm-3" })
<div class="col-xs-6 col-sm-3">
@Html.EditorFor(model => model.Nombres)
</div>
<div>
@Html.ValidationMessageFor(model => model.Nombres)
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
@Html.LabelFor(model => model.Apellidos, new { @class = "col-xs-6 col-sm-3" })
<div class="col-xs-6 col-sm-3">
@Html.EditorFor(model => model.Apellidos)
</div>
<div>
@Html.ValidationMessageFor(model => model.Apellidos)
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
@Html.LabelFor(model => model.Email, new { @class = "col-xs-6 col-sm-3" })
<div class="col-xs-6 col-sm-3">
@Html.EditorFor(model => model.Email)
</div>
<div>
@Html.ValidationMessageFor(model => model.Email)
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
@Html.LabelFor(model => model.FechaDesde, new { @class = "col-xs-6 col-sm-3" })
<div class="col-xs-6 col-sm-3">
@Html.EditorFor(model => model.FechaDesde)
</div>
<div>
@Html.ValidationMessageFor(model => model.FechaDesde)
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
@Html.LabelFor(model => model.FechaHasta, new { @class = "col-xs-6 col-sm-3" })
<div class="col-xs-6 col-sm-3">
@Html.EditorFor(model => model.FechaHasta)
</div>
<div>
@Html.ValidationMessageFor(model => model.FechaHasta)
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<div class="col-xs-6 col-sm-3" id="stylesheet"></div>
<div class="col-xs-6 col-sm-3">
<input type="submit" name="btnSubmit" />
</div>
</div>
</div>
}
控制器:
public class RegistroDeSolicitudesController : Controller
{
[SharePointContextFilter]
public ActionResult Index()
{
ViewBag.Title = "Registro de Solicitudes";
return View();
}
[HttpPost]
[SharePointContextFilter]
public ActionResult Index([Bind(Include = "Cabana,Cedula,Nombres,Apellidos,Email,FechaDesde,FechaHasta")] Reserva reserva)
{
if (ModelState.IsValid)
{
try
{
var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext);
using (var cc = spContext.CreateUserClientContextForSPHost())
{
reserva.Estado = "Pendiente";
Helpers.SaveSolicitud(cc, reserva);
}
HttpContext.Session["PrimeraVez"] = "no";
TempData["UserMessage"] = "Su solicitud ha sido registrada exitosamente";
TempData["AlertClass"] = "alert-success";
}
catch (Exception)
{
TempData["UserMessage"] = "Lo sentimos, ha ocurrido un error. Intenta de nuevo";
TempData["AlertClass"] = "alert-danger";
}
}
ViewBag.Title = "Registro de Solicitudes";
return View();
}
}
型号:
public class Reserva
{
[Display(Name = "Cabaña")]
[StringLength(2, MinimumLength = 2)]
public string Cabana { get; set; }
[Display(Name = "Cédula")]
[Required(ErrorMessage = "Por favor escriba su cédula")]
public int Cedula { get; set; }
[Required(ErrorMessage = "Por favor escriba sus Nombres")]
[StringLength(60, MinimumLength = 3, ErrorMessage = "Por favor escriba un valor válido para este campo")]
public string Nombres { get; set; }
[Required(ErrorMessage = "Por favor escriba sus Apellidos")]
[StringLength(60, MinimumLength = 3, ErrorMessage = "Por favor escriba un valor válido para este campo")]
public string Apellidos { get; set; }
[Required(ErrorMessage = "Por favor escriba un correo electrónico")]
[StringLength(60, MinimumLength = 3, ErrorMessage = "Por favor escriba un correo válido")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[DisplayName("Fecha desde")]
[Required(ErrorMessage = "Por favor escriba una fecha")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime FechaDesde { get; set; }
[DisplayName("Fecha Hasta")]
[Required(ErrorMessage = "Por favor escriba una fecha")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime FechaHasta { get; set; }
public string Estado { get; set; }
}
将您的 return View()
更改为
return RedirectToAction("Index", new { SPHostUrl = SharePointContext.GetSPHostUrl(HttpContext.Request).AbsoluteUri });