ASP.NET MVC应用程序首先执行post而不是get

时间:2015-04-15 16:30:12

标签: c# asp.net asp.net-mvc sharepoint

我有一个带有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; }
}

1 个答案:

答案 0 :(得分:2)

return View()更改为

 return RedirectToAction("Index", new { SPHostUrl = SharePointContext.GetSPHostUrl(HttpContext.Request).AbsoluteUri });
相关问题