2013-09-27 37 views
0

我在C#中有经验,但在Javascript中没有任何经验。 我想达到的不应该那么难,但我不能让它工作:用另一个MVC填充控件

我想用文本框的文本属性填充标签的文本属性。 这需要在KeyUpEvent完成。

我已经创建了KeyUpEvent,它是工作,而是使用下面的代码不会填满我的标签的文本属性:

<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     $("#@Html.FieldIdFor(model => model.Quantity)").keyup(OnQuantityChanged); 
    }); 

    function OnQuantityChanged() 
    { 
     alert("onQuantityChanged event fired.") 
     document.getElementById('#@Html.FieldIdFor(model => model.SubTotalExclTax)').value = document.getelementById('#@Html.FieldIdFor(model => model.UnitPriceExclTax)').value 
    } 
</script> 

所以我创建了一个名为OnQuantityChanged()功能,我调用这个函数上KeyUp事件。 我的函数中的警报:alert("onQuantityChanged event fired.")被调用并显示一个对话框,所以函数调用。

我正在使用@Html.FieldIdFor获取控件的ID。我认为,这是由NopCommerce实现,到这里是FieldIdFor方法的定义:

public static string FieldIdFor<T, TResult>(this HtmlHelper<T> html, Expression<Func<T, TResult>> expression) 
{ 
    var id = html.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression)); 
    // because "[" and "]" aren't replaced with "_" in GetFullHtmlFieldId 
    return id.Replace('[', '_').Replace(']', '_'); 
} 

我想我犯了一个语法错误,但不知道如何调试JavaScript,因为在Visual Studio中设置断点(2012),不会暂停代码。

我认为线下有一些不正确的语法,纠正我,如果我错了:

document.getElementById('#@Html.FieldIdFor(model => model.SubTotalExclTax)').value = document.getelementById('#@Html.FieldIdFor(model => model.UnitPriceExclTax)').value 

更新

页面的HTML低于:

<table> 
      <tr> 
       <td> 
        @Html.NopLabelFor(model => model.UnitPriceInclTax): 
       </td> 
       <td> 
        @Html.EditorFor(model => model.UnitPriceInclTax)@Model.UnitPriceInclTax 
       </td> 
      </tr> 
      <tr> 
       <td> 
        @Html.NopLabelFor(model => model.UnitPriceExclTax): 
       </td> 
       <td> 
        @Html.EditorFor(model => model.UnitPriceExclTax)@Model.UnitPriceExclTax 
       </td> 
      </tr> 
      <tr> 
       <td> 
        @Html.NopLabelFor(model => model.Quantity): 
       </td> 
       <td colspan="2"> 
        @Html.EditorFor(model => model.Quantity, new { id = "lblQuantity"}) 
       </td> 
      </tr> 
      <tr> 
       <td> 
        @Html.NopLabelFor(model => model.SubTotalInclTax): 
       </td> 
       <td> 
        @Html.EditorFor(model => model.SubTotalInclTax)@Model.SubTotalInclTax 
       </td> 
      </tr> 
      <tr> 
       <td> 
        @Html.NopLabelFor(model => model.SubTotalExclTax): 
       </td> 
       <td> 
        @Html.EditorFor(model => model.SubTotalExclTax)@Model.SubTotalExclTax 
       </td> 
      </tr> 
     </table> 
+0

那岂不是更清晰,让您的内容明确的标识,然后使用这些在你的jQuery选择? – paul

+0

通常,断点对语法错误没有多大帮助。当询问操纵HTML的代码时,呈现HTML会有很大帮助。 –

回答

1
  1. 你并不需要的时候#使用docume nt.getElementById只是代表id的字符串就足够了。
  2. 没有任何标签值可以设置innerText属性。

纯JavaScript解决方案:

document.getElementById("YourID").innerText = "New Text"; 

JQuery的解决方案

$("#YourID").text("New Text"); 
1

那部分服务器端代码不在ASP.NET中执行,因为它位于字符串中。您可以使用甲阶酚醛树脂一个变量来存储ID:

var subTotalId = @Html.FieldIdFor(model => model.SubTotalExclTax); 

,然后在你的JavaScript使用subTotalId(假设Html.FieldIdFor返回元素的ID

更好的方法是只使用。 JavaScript中,与ASP.NET MVC你为什么不使用jQuery应该知道的DOM元素的ID,那么为什么你需要在运行时找到它们 :

$('#IdOfSubTotalElement').val();