如何将剃刀视图模式属性值传递给 javascript 函数

Posted

技术标签:

【中文标题】如何将剃刀视图模式属性值传递给 javascript 函数【英文标题】:How to pass a razor view modal property value to a javascript function 【发布时间】:2013-12-07 02:49:13 【问题描述】:

我尝试将剃刀值发送到 jquery 函数。

查看:

@html.TextBoxFor(model => model.NumTransportado, new  @class = "form-control input-sm", id = "NumTransResp" + Model.ServicosID + "", name = "NumTransResp" + Model.ServicosID + "", onchange = "PreencheDadosVendedor(this, 3, " + @Model.ServicosID + ")" )

我可以使用除" + @Model.ServicosID + "以外的所有参数

js文件:

function PreencheDadosVendedor(idVend, tipoFuncionario, idServicoEdicao) 
$.getJSON("/Contrato/getDadosVendedor",  id: $(idVend).val(), tipoFuncionario: tipoFuncionario ,
  function (result) 
      switch (tipoFuncionario) 
          case 1:
              $("#NomeVendedor_Contrato").val(result.NomeVendedor);
          case 2:
              $("#NomeTransResponsavel").val(result.NomeVendedor);
          case 3:
              $("#NomeTransResponsavel_" + idServicoEdicao + "").val(result.NomeVendedor);
      
  );

我尝试做idSericoEdicao 是我的@Model.ServicosID,但我有相同的结果:未定义

【问题讨论】:

@Model.ServicosID 在你的视图模型中真的有值吗? 是的,有价值。我用了好几次 查看HTML页面的源代码(在浏览器中),找到那个onchange属性。它看起来像什么? 看起来不错,做我想做的事 浏览器中的 html:<input class="form-control input-sm" data-val="true" data-val-number="The field NumTransportado must be a number." id="NumTransResp683" name="NumTransportado" onchange="PreencheDadosVendedor(this, 3, 683)" type="text" value="4"> 我想要的 683 it 值 【参考方案1】:

你得到未定义的原因(假设值是一个字符串)是因为你需要将@Model.ServicosID 括在引号中,否则它将查找属性的值作为变量的名称,而不是你只需要将值作为字符串传递。

试试这个:-

@Html.TextBoxFor(model => model.NumTransportado, 
                  new  @class = "form-control input-sm", 
                    id = "NumTransResp" + Model.ServicosID + "", 
                    name = "NumTransResp" + Model.ServicosID + "", 
                    onchange = "PreencheDadosVendedor(this, 3, '" + @Model.ServicosID + "')" );
                                                               ^____                     ^____                                  

或者最好这样做,而不是添加onchange 属性;而是附加一个事件并使用data-* 属性来存储特定于元素的值,这样您就可以将html和js分开:

即:

@Html.TextBoxFor(model => model.NumTransportado, 
                      new  @class = "form-control input-sm myclass", //Add a class  
                        id = "NumTransResp" + Model.ServicosID + "",
                        data_tipoFuncionario = 3, //Add a data attribute 
                        name = "NumTransResp" + Model.ServicosID + "");

$('.myclass').change(function(e)
     var idServicoEdicao = this.id.replace("NumTransResp",""),  //get the part from its own id
         tipoFuncionario = $(this).data("tipoFuncionario"); //get the value from data attribute

     $.getJSON("/Contrato/getDadosVendedor",  id: this.value, tipoFuncionario: tipoFuncionario ,
 function (result) 
      switch (tipoFuncionario) 
          case 1:
              $("#NomeVendedor_Contrato").val(result.NomeVendedor);
          case 2:
              $("#NomeTransResponsavel").val(result.NomeVendedor);
          case 3:
              $("#NomeTransResponsavel_" + idServicoEdicao).val(result.NomeVendedor);
      
  );

);

【讨论】:

以上是关于如何将剃刀视图模式属性值传递给 javascript 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从javascript变量传递给剃刀变量?

如何将数据从剃刀视图传递到 mvc3 中的控制器?

asp.net mvc,剃刀部分视图-布尔属性未显示

在剃刀中将迭代数据从按钮传递到模态

如何在剃刀视图中检查模型字符串属性是不是为空

MVC 4如何将模型属性列表从视图传递给Action