我有一个带有MCV项目的Sharepoint提供者托管应用程序,主页面是一个包含2个索引操作,一个获取和一个帖子的应用程序部分。问题是,在第一页加载时,当用户甚至没有开始填充表单时,验证就会发生,因为它直接进入后控制器而不是到达
我的想法是在索引中获取视图,并在帖子中提交表单。
查看:
@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; }
}
答案 0 :(得分:2)
将return View()
更改为
return RedirectToAction("Index", new { SPHostUrl = SharePointContext.GetSPHostUrl(HttpContext.Request).AbsoluteUri });