0

の経験はありますがC#、経験はありませんJavascript。私が達成したいことはそれほど難しいことではありませんが、それを機能させることができません:

ラベルのテキスト プロパティをテキスト ボックスのテキスト プロパティで埋めたい。これは で行う必要があります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(']', '_');
}

Visual Studio (2012) でブレークポイントを設定してもコードが一時停止しないため、構文エラーが発生したと思いますが、Javascript をデバッグする方法がわかりません。

以下の行には間違った構文があると思います。間違っている場合は修正してください。

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>
4

2 に答える 2

1

サーバー側コードのその部分は、文字列内にあるため、ASP.NET によって実行されません。変数を使用して ID を格納することができます。

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

次に、javascript で subTotalId を使用します (Html.FieldIdFor が要素の ID を返すと仮定します。

より良い方法は、javascript のみを使用することです。ASP.NET MVC では、DOM 要素の ID を知っておく必要があります。なぜ実行時にそれらを見つける必要があるのでしょうか? Jquery を使用しない理由:

$('#IdOfSubTotalElement').val();
于 2013-09-27T10:29:20.153 に答える