2017-01-25 24 views
0

私はモデルによって完全に完成したフォームを持っていますが、この瞬間にモデルがnullであると信じているため、いくつかの属性を取得できません。問題は、私が@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> 

コントローラをチェックアウト:モデル

@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

関連性があります:http://stackoverflow.com/questions/23293886/mvc-uppercase-model-vs-lowercase- models –

+1

'モデル'の前に '@'記号を使用する必要はありません。 @記号は 'if'文の前にあります。 –

+0

@記号はすでに削除されていますが運がありません。 –

答えて

1

なぜあなたの理由から

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

ありがとうございます!それは私に多くの助けになる! –

1

削除@をモデルには価値が与えられているあなたのビューの上部にあなたがこれを持っているので、nullは次のとおりです。

@model SeaConnectionManager.Modelos.EnvioMensajes.InformacionEntity‌​

だから、あなたのビューはタイプInformacionEntityのオブジェクトを期待です。

ただし、そのオブジェクトをビューに戻すことになっているコントローラでは、InformacionEntityオブジェクトは返されません。

だからあなたのコントローラでは、この持っている:あなたが戻るために必要なものである

InformacionEntity Info = new InformacionEntity();

を。

だからあなたにreturn文を変更します。

return View(Info);

このことができますなら、私を知ってみましょう!あなたのビューの

+0

ありがとう、私はそれをtryiedしかし運がない。 –

1

モデルタイプは、その型のオブジェクトをレンダリングする必要があるビューを意味

SeaConnectionManager.Modelos.EnvioMensajes.InformacionEntity

です。

あなたのコントローラーアクションは、ビューをまったく返さないことを示しています。代わりにContentResultを返します。コンテンツの結果は、ビューによって予期されるモデルタイプに変換することはできません。そのため、あなたのモデルは常にnullで、ブロック内に入ることはありません "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); 

    } 

ここでは、あなたのビューの名前があなたの行動の名前と同じであると仮定しています。

関連する問題