0

我的問題是,我的ViewModel屬性不綁定到一個操作參數。 我認爲如果我只是給你我的代碼會更清楚。ViewModel屬性不綁定到控制器動作參數

我有一個模型如下:

namespace Sima3.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class Usuario 
    { 
     public string Login { get; set; } 
     public string NombreCompleto { get; set; } 
     public short Organigrama { get; set; } 
     public int Interno { get; set; } 
     public string EMail { get; set; } 
    } 
} 

而我加入DataAnnotations該局部類在另一個文件中(因爲這個模型是由的EntityFramework自動生成的),音符上登錄屬性遠程驗證:

namespace Sima3.Models 
{ 
    [MetadataType(typeof(UsuarioMetaData))] 
    public partial class Usuario 
    { 
    } 
    public class UsuarioMetaData 
    { 
     [Display(Name = "Nombre de Usuario")] 
     [Remote("NoExisteUsuario", "Validation")] 
     [Required] 
     public string Login { get; set; } 
     [Display(Name = "Nombre y Apellido")] 
     [Required] 
     public string NombreCompleto { get; set; } 
     [Display(Name = "Sector")]   
     [Required] 
     public short Organigrama { get; set; } 
     [Required] 
     public int Interno { get; set; } 
     [EmailAddress] 
     [Required] 
     public string EMail { get; set; } 
    } 
} 

現在,我有一個ViewModel至極包含類型Usuario的屬性,需要渲染我查看了一些其他的東西:

namespace Sima3.ViewModels.PedidoViewModels 
{ 
    public class AgregarViewModel 
    { 
     public Usuario Usuario { get; set; } 
     public Pedido Pedido { get; set; } 
     public SelectList ListaSectores { get; set; } 
     public SelectList ListaEstados { get; set; } 
     public SelectList ListaPrioridades { get; set; } 
     public SelectList ListaTipos { get; set; } 
     public SelectList ListaDirecciones { get; set; } 
    } 
} 

而我的看法如下所示(我將只發布它的一部分,如果u需要看到更多的讓我知道):

@using (Ajax.BeginForm("Crear", "Usuario", null, 
       new AjaxOptions 
       { 
        OnSuccess = "UsuarioCreadoSuccess", 
        HttpMethod = "Post" 
       } 
       , new { @class = "form-horizontal", id = "FormUsuario" })) 
      { 
       @Html.AntiForgeryToken() 
       <div class="modal-header"> 
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> 
        <h4 class="modal-title title">Nuevo Usuario</h4> 
       </div> 
       <div class="modal-body"> 
        @Html.ValidationSummary(true) 
        <div class="form-group"> 
         @Html.LabelFor(model => model.Usuario.Login, new { @class = "col-lg-4 control-label" }) 
         <div class="col-lg-7"> 
          @Html.TextBoxFor(model => model.Usuario.Login, new { @class = "form-control"}) 

          @Html.ValidationMessageFor(model => model.Usuario.Login) 
         </div> 
        </div> 

好了,最重要的部分是TextBoxFor,它呈現我的下一個HTML:

<input class="form-control valid" data-val="true" data-val-remote="'Nombre de Usuario' is invalid." data-val-remote-additionalfields="*.Login" data-val-remote-url="/Validation/NoExisteUsuario" data-val-required="El campo Nombre de Usuario es obligatorio." id="Usuario_Login" name="Usuario.Login" type="text" value=""> 

正如你看到的,文本框名稱爲:名= 「Usuario.Login」

而且我控制器AC重刑至極得到由遠程驗證稱爲是這樣的:

public JsonResult NoExisteUsuario([Bind(Prefix="Usuario")]string Login) 
    { 
     Usuario usuario = db.Usuarios.Find(Login); 
     if (usuario != null) 
     { 
      var MensajeDeError = string.Format("El usuario {0} ya existe", Login); 
      return Json(MensajeDeError, JsonRequestBehavior.AllowGet); 
     } 
     else 
     { 
      return Json(true, JsonRequestBehavior.AllowGet); 
     } 
    } 

我在這個動作設置一個斷點,它被擊中,但登錄進來空。 我檢查了谷歌瀏覽器的調試器的HTTP請求標題,它顯示錶單正在提交像這樣:Usuario.Login:asdasdasd。

問題很簡單,我該如何使它綁定?

順便說一句,我使用MVC5。

謝謝。

回答

1

那麼,我終於得到它的工作,似乎我錯誤地設置前綴綁定屬性。 現在我的動作如下所示:

public JsonResult NoExisteUsuario([Bind(Prefix="Usuario.Login")]string login) 
    { 
     Usuario usuario = db.Usuarios.Find(login); 
     if (usuario != null) 
     { 
      var MensajeDeError = string.Format("El usuario {0} ya existe", login); 
      return Json(MensajeDeError, JsonRequestBehavior.AllowGet); 
     } 
     else 
     { 
      return Json(true, JsonRequestBehavior.AllowGet); 
     } 
    } 
相關問題