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 回答