2016-11-16 65 views
0

我需要在视图中填充表单后显示错误或成功消息,并且如果控制器的操作方法捕获异常,则显示表示在表单上注册成功或不成功的消息。将数据插入表单后显示错误或成功消息MVC

这是形式的我的HTML代码:

@using (Html.BeginForm("GetSolictudMarca", "Gestion", FormMethod.Post, new { @id = "Frm-login", role = "form", @class = "form-horizontal" })) 
        { 
         <div class="panel panel-default" style="width:80%;margin:0 auto;"> 
          <div class="panel-heading"></div> 
          <div class="panel-body"> 
           <div class="row"> 
            <div class="col-lg-6"> 
             <br /> 
             <div class="form-group-sm"> 
              <div class="col-lg-10"> 
               <p> <strong>Nº Expediente:</strong></p> 
               <input class="form-control" id="expedienteNro" name="expedienteNro" type="number" placeholder="Nº Expediente" required autocomplete="off" onkeypress="return pulsarExpediente(event)"> 
              </div> 
             </div> 
            </div> 
           </div> 
           <br /> 
           <div class="row ">          
            <div class="col-lg-6"> 
             <div class="form-group-sm"> 
              <div class="col-lg-10"> 
               <p><strong>Fecha Solicitud:</strong></p> 
               @(Html.Kendo().DateTimePicker() 
             .Name("fechaSolicitud") 
             .Value(DateTime.Now) 
             .HtmlAttributes(new { style = "width:100%;", required = "required" }) 
               ) 
              </div> 
             </div> 
            </div> 
            <div class="col-lg-6"> 
             <div class="form-group-sm"> 
              <div class="col-lg-10"> 
               <p><strong>Fecha Estado:</strong></p> 
               @(Html.Kendo().DateTimePicker() 
             .Name("fechaEstado") 
             .Value(DateTime.Now) 
             .HtmlAttributes(new { style = "width:100%;", required = "required" }) 
               ) 
              </div> 
             </div> 
            </div>         
           </div> 
           <br /> 
           <div class="row"> 
            <div class="col-lg-6"> 
             <div class="form-group-sm"> 
              <div class="col-lg-10"> 
               <p><strong>Pais:</strong></p> 
               @(Html.Kendo().ComboBox() 
                .Name("pais2") 
                .DataTextField("PaisDescripcion") 
                .DataValueField("PaisCodigo") 
                .HtmlAttributes(new { style = "width:100%", required = "required" }) 
                .Filter(FilterType.StartsWith) 
                .IgnoreCase(true) 
                .Placeholder("Seleccione un país...") 
                .DataSource(source => 
                { 
                 source.Read(read => 
                 { 
                  read.Action("GetPais", "Gestion"); 
                 }); 
                }) 
               ) 

              </div> 
             </div> 
            </div> 
           </div> 

           <div class="row"> 
             <div class="col-lg-4" style="margin-left:30px; margin-top:30px; width:100%"> 
              <button class="btn btn-success" type="submit" id="btnRegistrar">Registrar</button> 
              <button class="btn btn-success" type="reset">Cancelar</button> 
             </div> 
            </div> 
           <div class="row"> 
            @*@Html.ValidationSummary("error")*@ 
            <div class="alert "> 
             @Html.ValidationMessage("error", new { @id = "validationMessage" }) 
            </div> 
           </div>         
          </div> 
         </div> 
        } 

而且这是我的控制器:

public async Task<ActionResult> GetSolictudMarca(FormCollection frm) 
    { 
     string ExpedienteGeneral = Request.Form["expedienteNro"]; 
     string fechaSolicitud = Request.Form["fechaSolicitud"]; 
     string fechaEstado = Request.Form["fechaEstado"]; 
     string pais = Request.Form["pais2"]; 

     return await Task.Run(() => 
     { 
      string sqlString = "select * from gmc_expediente where exp_codigo = :selectExpNro"; 
      string queryRoles = "insert into gmc_expediente(EXP_CODIGO,\n" + 
      "EXP_FECHA_SOLICITUD,\n" + 
      "EXP_FECHA_ESTADO,\n" + 
      "EXP_PAIS)\n" + 
      "values(:ExpCodigo,\n" + 
      " :fechaSolicitud ,\n" + 
      " :fechaEstado,\n" + 
      " :pais)"; 


      #region Conexion 
      string cadena = ConfigurationManager.ConnectionStrings["OracleDbContext"].ConnectionString; 
      OracleConnection con = new OracleConnection(cadena); 
      OracleCommand cmd = new OracleCommand(queryRoles, con); 

      cmd.Parameters.Add(new OracleParameter("ExpCodigo", string.IsNullOrEmpty(nuevoExpediente) ? int.Parse(ExpedienteGeneral) : int.Parse(nuevoExpediente))); 
      cmd.Parameters.Add(new OracleParameter("fechaSolicitud", DateTime.Parse(fechaSolicitud))); 
      cmd.Parameters.Add(new OracleParameter("fechaEstado", DateTime.Parse(fechaEstado))); 
      cmd.Parameters.Add(new OracleParameter("pais", int.Parse(pais))); 

      #region Procedimiento 
      try 
      { 
       con.Open(); 
       Permisos.OtorgarPermisos(con); 
       using (OracleDataReader dr = cmd2.ExecuteReader()) 
       { 
        while (dr.Read()) 
        { 
         //make an insert or update into database 
        } 
       }    
      } 
      catch (Exception ex) 
      { 
       //and here when i catch the exception show the message in the view 
      } 
      finally 
      { 
       if (con.State == System.Data.ConnectionState.Open) 
       { 
        con.Close(); 
        con.Dispose(); 
        cmd.Dispose(); 

       } 
      } 
      #endregion 
      return RedirectToAction("RegistroMarca"); 
     }); 
    } 

所有我需要的是,如果控制器捕捉的方法操作的异常显示的确切类型例外消息并显示到视图中。如果有可能像引导的像这样的警报消息:

<div class="alert alert-success" id="mostrarAlertSuccess" style="display:none; margin-top:10px"> 
    <strong>¡Eliminación exitosa!</strong> El registro fue eliminado correctamente. 
</div> 
<div class="alert alert-danger" id="mostrarAlertDanger" style="display:none; margin-top:10px"> 
    <strong>Danger!</strong> Indicates a dangerous or potentially negative action. 
</div> 
+0

看看[数据库更新后返回成功/失败消息以查看](http://stackoverflow.com/questions/40539736/returning-success-failure-message-to-view-after-database-更新/ 40540137#40540137) – Shyju

+0

谢谢,我现在明白了,但是你可以向我解释这个部分,你说:“现在在你的GET动作中(Profiles?id = someId),你基本上需要检查TempData值并将其显示为需要“。我如何将TempData值显示到视图中? –

回答

0

我会用TempData["key"]

这就好比ViewData["key"]但是数据仍然存在在未来的HttpRequest,由asp.net这个

后自动配置

控制器动作

[HttpPost] 
public ActionResult SomePostAction(SomeViewModel vm) 
{ 
    if(ModelState.IsValid) // Is User Input Valid? 
    { 
     try 
     { 
      CommitData(); 
      TempData["UserMessage"] = new { CssClassName = "alert-sucess", Title = "Success!", Message = "Operation Done." }; 
      return RedirectToAction("Success"); 
     } 
     catch(Exception e) 
     { 
      TempData["UserMessage"] = new { CssClassName = "alert-error", Title = "Error!", Message = "Operation Failed." }; 
      return RedirectToAction("Error"); 
     } 

    } 

    return View(vm); // Return View Model with model state errors 
} 

_Layout.cshtml

<!DOCTYPE html> 
    <html> 
    <head> 

    </head> 
    <body> 
     @if(TempData["UserMessage"] != null) 
     { 
      <div class="alert @TempData["UserMessage"].CssClassName"> 
       <strong>@TempData["UserMessage"].Title</strong> @TempData["UserMessage"].Message 
      </div> 
     } 
      @RenderBody() 
    </body> 
</html> 
+0

当我把@TempData [“UserMessage”]。CssClassName它说'对象'不包含CssClassName的定义。 –