0

私は私の最後の質問をより明確な方法で更新します(私は願っています)。

誰かがこれを知っていますか:

$(document).ready(function () {
    $('#inner').click(function () {
        $('<div class="dropHere">@Ajax.JavaScriptStringEncode(Html.Partial("EditorAddInvoiceDetailsPartial").ToHtmlString()) </div>').insertBefore('#inner');

    });

});

最初は単純だった場所(partialview.cshtml内)に二重引用符を付けて部分ビューを生成します。挿入は次のようになります。

<fieldset id="productDetails">
    <legend>Details</legend>
    <div class="dropHere">
        <div class=""editor-label""> Product: </div>
        <div class=""editor-field"">
            <select id=""ProductId"" class=""ProductId"" name=""ProductId"">
                <option value=""""></option>
                <option value=""1"">Samsung</option>
                <option value=""2"">Seagate</option>
                <option value=""3"">OCZ</option>
                <option value=""4"">Asus</option>
                <option value=""5"">HP</option>
            </select>
        </div>
        <div class=""editor-label""> Price: </div>
        <div class=""editor-field"">
        <div class=""editor-label""> Tax: </div>
        <div class=""editor-field"">
        <div class=""editor-label""> Quantity: </div>
        <div class=""editor-field"">
        <div class=""editor-label""> Subtotal Excl.VAT: </div>
        <div class=""editor-field"">
        <div class=""editor-label""> Subtotal VAT: </div>
        <div class=""editor-field"">
        </div>
    </div>
</fieldset>

私はいくつかの解決策を見つけようとしましたが、何も関係ありません。それを修正することは可能ですが、ここに私の部分的なビューを挿入する新しい方法を見つける方が良いでしょう。

4

2 に答える 2

0

これが私がそれを行う方法です、最初に私は両方のイベントを同じ.ready()関数内に置きます。また、.changeProductPriceの外にdivがあると思います。これを.wrapperと呼びましょう。この例の問題は、最初の.changeProductPriceのイベントを追加し、新しいイベントを追加すると、それをオーバーライドして多くを取得することです。私の例では、ライブイベントを親に追加しているので、新しいイベントを追加しても失われることはありませんが、子にアタッチされます(changeProductPrice)。私は自分自身を説明しますか?

<script> 
    $(document).ready(function () {
    var index = 2;

    $('#inner').on('click', function () {


        $('<div data-index="' + index + '" class="changeProductPrice"><div class="editor-label"> Product: </div> <div class="editor-field">@Ajax.JavaScriptStringEncode(Html.DropDownList("ProductId",(IEnumerable<SelectListItem>)ViewBag.ProductId, "",  new { @class = "ProductId"}).ToHtmlString())</div><div class="editor-label">Price:</div><div class="editor-field"><input class="productprice" value="" /></div></div><div class="editor-label">Tax:</div><div class="editor-field">@Ajax.JavaScriptStringEncode(@Html.DropDownList("TaxId", (IEnumerable<SelectListItem>)ViewBag.TaxId, "", new { @class = "producttax" }).ToHtmlString())</div><div class="editor-label">Quantity:</div><div class="editor-field"><input class="productquantity" name="Qtn" value="" /></div>').insertBefore("#inner");
        index++;
    });

    $('.wrapper').on('change', '.changeProductPrice', function () {
        var url = '@Url.Action("SortPrices", "Invoice", null)';
        var ProductId = $(this).val();
        var el = $(this);
        $.ajax({
            url: url,
            type: 'GET',
            cache: false,
            data: { id: ProductId },
            success: function (result) {

                 el.parent().parent().find('.productprice').val(result);
                 el.parent().parent().find('.productprice').change();

                }
            });
        });
    });
</script>
于 2013-01-11T15:15:54.167 に答える
0

その文字列を介してパーシャルを構築するのではなく、Ajax を使用して、コントローラー アクションを介してパーシャルをレンダリングしてみませんか。

$('#drophere').load('/Editor/InvoiceDetails');

そうすれば、必要に応じて、部分ビューのモデル サーバー側も簡単に構築できます。

于 2013-01-13T11:00:20.697 に答える