Вызов ASP.NET MVC3 Razor Url.Action в частичном автоматическом добавлении идентификатора при перезагрузке в ajax - PullRequest
0 голосов
/ 30 декабря 2011

У меня есть ASP.NET MVC страница с несколькими частичными разделами. Каждый из этих разделов имеет инициализацию скрипта, и каждый из них обновляется как частичный из себя.

<script type="text/javascript">
    $(document).ready(function () {
        var section1Config = {
            AddEditSection1Url: "@Url.Action("AddEditSection1", "Loan")"
        };
    });
</script>

При начальной загрузке это выглядит так:

<script type="text/javascript">
    $(document).ready(function () {
        var section1Config = {
            AddEditSection1Url: "/Loan/AddEditSection1"
        };
    });
</script>

Когда я обновляю этот частичный раздел, действие Url.Action включает идентификатор, который я передал через AJAX, и я не спрашиваю его:

<script type="text/javascript">
    $(document).ready(function () {
        var section1Config = {
            AddEditSection1Url: "/Loan/AddEditSection1/2"
        };
    });
</script>

Вот звонок, который я делаю на стороне клиента:

$.post('/Loan/AddEditSection1/2', function (data) {
    $('#loanadd-1').html(data);
});

А вот код на стороне сервера, который вызывается этим постом jQuery:

public PartialViewResult AddEditSection1(int id)
{
    var viewModel = GetPopulatedAddEditViewModel(id);
    return PartialView("Partials/AddEditSection1", viewModel);
}

Есть хоть какой-то ключ к пониманию того, почему движок рендеринга так полезен? Это действительно делает вещи излишне трудными.

1 Ответ

1 голос
/ 30 декабря 2011

Большую часть времени вы действительно найдете это поведение весьма полезным, фактически вы уже привыкли к нему, обратите внимание, что часто вы будете вызывать Url.Action или Html.Action без имени вашего контроллера, все это частьтот же поставщик параметров.

В любом случае, в ситуациях, когда вы явно не хотите включать параметр, просто передайте объект и ничего не устанавливайте:

<script type="text/javascript">
$(document).ready(function () {
    var section1Config = {
        AddEditSection1Url: "@Url.Action("AddEditSection1", "Loan", new {id=""})"
    };
});
</script>
...