2017-01-25 2 views
0

У меня есть форма, полностью заполненная моделью, но я не могу получить некоторые атрибуты, потому что я считаю, что в этот момент модель равна нулю. Дело в том, что когда я использую @Model.someattribute, он не работает, но с m => m.cantidadMensajes. Мне нужно знать, почему это произошло, и как мне с этим бороться?Невозможно получить атрибут модели из razor ASP.net - C#

@model SeaConnectionManager.Modelos.EnvioMensajes.InformacionEntity 

@{ var previsualizaciones = ""; 
    if (@Model != null) { 
     previsualizaciones = @Model.vistaPrevia; 
    } 
} 
<div id="Envio" class="overlay"> 
    <div class="popup"> 

     <h2 align="center">Información del Env&iacute;o</h2> 
     <a class="close" href="#">&times;</a> 
     <div class="content" style="width:100%; margin:auto; padding:10px"> 
      <center> 
       <a id="tabs"> 
        <ul> 

         @if (@Model != null) { 
          if (@Model.cantidadMensajes >= 5) 
          { 
           for (var i = 1; i <= 5; i++) 
           { 
            <li><a href="#[email protected]"> @i</a></li> 
           } 
          } 
          else { 
           for (var i = 1; i <= @Model.cantidadMensajes; i++) 
           { 
            <li><a href="#[email protected]"> @i</a></li> 
           }     
          } 
         } 

        </ul> 
        @previsualizaciones 
       </div> 

         <table width="100%" border="0" align="center" cellspacing="4"> 

          <tr> 
           <td width="36%">Cantidad de mensajes</td> 
           <td width="44%"> 
            @Html.TextBoxFor(m => m.cantidadMensajes, new { @id = "CantidadMensajes", @class = "input-login", @readonly = "readonly" }) 
           </td> 
          </tr> 
          <tr> 
           <td>Cantidad de contactos</td> 
           <td> 
            @Html.TextBoxFor(m => m.cantidadContactos, new { @id = "CantidadContactos", @class = "input-login", @readonly = "readonly" }) 
           </td> 
          </tr> 
          <tr> 
           <td>Saldo</td> 
           <td> 
            @Html.TextBoxFor(m => m.saldo, new { @id = "Saldo", @class = "input-login", @readonly = "readonly" }) 
            @Html.HiddenFor(m => m.idTransaccion, new { @id = "idTransaccion" }) 
           </td> 
          </tr> 

         </table> 
      </center><br> 
      <center> 
       <table width="122" border="0" align="center" cellspacing="10"> 
        <tr> 
         <td width="51"><a onclick="EnviarMensajes()" class="boton-para-enviar" style="margin:auto">Aprobar</a></td> 
         <td width="37"><a href="#" class="boton-para-NO-enviar" style="margin:auto">Rechazar</a></td> 
        </tr> 
       </table> 
      </center> 

Изменения после выполнения некоторых советов, не повезло:

@model SeaConnectionManager.Modelos.EnvioMensajes.InformacionEntity 

@{ var previsualizaciones = ""; 
    if (Model != null) { 
     previsualizaciones = Model.vistaPrevia; 
    } 
} 
<div id="Envio" class="overlay"> 
    <div class="popup"> 

     <h2 align="center">Información del Env&iacute;o</h2> 
     <a class="close" href="#">&times;</a> 
     <div class="content" style="width:100%; margin:auto; padding:10px"> 
      <center> 
       <a id="tabs"> 
        <ul> 

         @if (Model != null) { 
          if (Model.cantidadMensajes >= 5) 
          { 
           for (var i = 1; i <= 5; i++) 
           { 
            <li><a href="#[email protected]"> @i</a></li> 
           } 
          } 
          else { 
           for (var i = 1; i <= Model.cantidadMensajes; i++) 
           { 
            <li><a href="#[email protected]"> @i</a></li> 
           }     
          } 
         } 

        </ul> 
        @previsualizaciones 
       </div> 

         <table width="100%" border="0" align="center" cellspacing="4"> 

          <tr> 
           <td width="36%">Cantidad de mensajes</td> 
           <td width="44%"> 
            @Html.TextBoxFor(m => m.cantidadMensajes, new { @id = "CantidadMensajes", @class = "input-login", @readonly = "readonly" }) 
           </td> 
          </tr> 
          <tr> 
           <td>Cantidad de contactos</td> 
           <td> 
            @Html.TextBoxFor(m => m.cantidadContactos, new { @id = "CantidadContactos", @class = "input-login", @readonly = "readonly" }) 
           </td> 
          </tr> 
          <tr> 
           <td>Saldo</td> 
           <td> 
            @Html.TextBoxFor(m => m.saldo, new { @id = "Saldo", @class = "input-login", @readonly = "readonly" }) 
            @Html.HiddenFor(m => m.idTransaccion, new { @id = "idTransaccion" }) 
           </td> 
          </tr> 

         </table> 
      </center><br> 
      <center> 
       <table width="122" border="0" align="center" cellspacing="10"> 
        <tr> 
         <td width="51"><a onclick="EnviarMensajes()" class="boton-para-enviar" style="margin:auto">Aprobar</a></td> 
         <td width="37"><a href="#" class="boton-para-NO-enviar" style="margin:auto">Rechazar</a></td> 
        </tr> 
       </table> 
      </center> 
      <br> 
      <strong>Nota:</strong> Si el saldo no se encuentra completo para la cantidad total de mensajes, los mensajes que queden pendientes se enviarán cuando realice la recarga. 
     </div> 
    </div> 
</div> 

Проверьте контроллер из:

public ActionResult EnviarMensajeIndividual(MensajesEntity model) 
     { 
      InformacionEntity Info = new InformacionEntity(); 
      Info.error = false; 
      model.usuarioCreacion = User.Identity.Name; 

      if (HttpContext.Session["Lista"] != null && model.mensaje != null) 
      { 
       List<ContactoEntity> lista = HttpContext.Session["Lista"] as List<ContactoEntity>; 

       int idTransaccion = mdm.EnviarMensajes(model, lista, 1); 
       if (idTransaccion > 0) 
       { 
        Info = mdm.InformacionDeEnvio(idTransaccion); 
        Info.error = false; 
       } 
       else 
       { 
        //error 
        Info.error = true; 
        Info.mensajeError = "error."; 
       } 
      } 
      else 
      { 
       // tiene q tener contactos agregados 
       Info.error = true; 
       Info.mensajeError = "error"; 
      } 
      var js = new JavaScriptSerializer(); 
      var Data = new ContentResult(); 
      js.MaxJsonLength = Int32.MaxValue; 
      Data.Content = js.Serialize(Info); 
      Data.ContentType = "application/json"; 

      return Data; 
     } 
+0

может быть связан: http: //stackoverflow.com/questions/23293886/mvc-uppercase-model-vs-lowercase-model –

+1

Вам не нужно использовать символ '@' перед 'Model', если' Символ @ 'находится перед оператором' if'. –

+0

Я уже удалил символ @, но не повезло. –

ответ

1

Причина, почему ваш Модель получает значение нуль происходит потому, что в верхней части вашей точки зрения у вас есть это:

@model SeaConnectionManager.Modelos.EnvioMensajes.InformacionEntity‌​

Итак, ваш взгляд ожидает объекта типа InformacionEntity.

Однако в вашем контроллере, где вы должны вернуть этот объект в представление, вы не возвращаете объект InformacionEntity.

Таким образом, в вашем контроллере, у вас есть это:

InformacionEntity Info = new InformacionEntity();

Какой то, что вам нужно, чтобы вернуться.

Таким образом изменить обратный заявление:

return View(Info);

Позвольте мне знать, если это помогает!

+0

Спасибо! Это мне очень помогает! –

1

Удалить @ от модели

@if (Model != null) { 
         if (Model.cantidadMensajes >= 5) 
         { 
          for (var i = 1; i <= 5; i++) 
          { 
           <li><a href="#[email protected]"> @i</a></li> 
          } 
         } 
         else { 
          for (var i = 1; i <= Model.cantidadMensajes; i++) 
          { 
           <li><a href="#[email protected]"> i</a></li> 
          }     
         } 
        } 
+0

Спасибо, я попробовал, но не повезло. –

1

Модель тип вашего зрения SeaConnectionManager.Modelos.EnvioMensajes.InformacionEntity

Это означает, что представление должно быть вынесено с объектом этого типа.

Действия вашего диспетчера показывают, что вы вообще не возвращаете представление. Вместо этого вы возвращаете ContentResult. Результат контента не может быть переведен на тип модели, ожидаемый в представлении. Вот почему ваша модель всегда равна нулю, и вы не попадаете в блок «if (Model! = Null)».

Вам необходимо внести следующие изменения в действие контроллера.

public ActionResult EnviarMensajeIndividual(MensajesEntity model) 
    { 
     InformacionEntity Info = new InformacionEntity(); 
     Info.error = false; 
     model.usuarioCreacion = User.Identity.Name; 

     if (HttpContext.Session["Lista"] != null && model.mensaje != null) 
     { 
      List<ContactoEntity> lista = HttpContext.Session["Lista"] as List<ContactoEntity>; 

      int idTransaccion = mdm.EnviarMensajes(model, lista, 1); 
      if (idTransaccion > 0) 
      { 
       Info = mdm.InformacionDeEnvio(idTransaccion); 
       Info.error = false; 
      } 
      else 
      { 
       //error 
       Info.error = true; 
       Info.mensajeError = "error."; 
      } 
     } 
     else 
     { 
      // tiene q tener contactos agregados 
      Info.error = true; 
      Info.mensajeError = "error"; 
     } 
     return View(Info); 

    } 

Здесь я предполагаю, что имя вашего вида совпадает с именем вашего действия.