Обновление DIV с частичным представлением по нажатию кнопки (динамическое)

Поэтому я хочу сделать что-то почти такое же, как вы найдете здесь: http://www.makeitspendit.com/calling-asp-mvc-controllers-from-jquery-ajax/

Это будет делать именно то, что я хочу, но сценарий, написанный для всех 4 кнопок, не очень СУХОЙ. (Ну совсем не СУХОЙ)

Я хотел бы иметь один сценарий для вызова правильного представления, основанного на идентификаторе кнопки, так что код должен был бы быть на моей странице только один раз. Я попытался передать this.id в вызов функции и использовать конкатенацию в свойстве "url:" вызова ajax, но это не сработало.
ПРИМЕР:

<div id="projectDiv">

<button onclick="loadProject(this.id)" id="_Project1">Project 1</button>
<button onclick="loadProject(this.id)" id="_Project2">Project 2</button>

<script>    
    function loadProject(projectID) {
          $.ajax({
            url: ("/Projects/Project/"+projectID),
            datatype: "text",
            type: "POST",
            success: function (data) {
              $('#projectDiv').html(data);
            },
          });
        });
</script>

И в контроллере:

[HttpPost]
public ActionResult Project(string id)
{
    return View(id);
}

Я искал все это и нашел похожие вещи (но не настолько, чтобы получить то, что мне нужно), но не смог найти этот сценарий - который, я бы предположил, был достаточно распространенным, чтобы иметь больше информации.

Пример кода демонстрирует, как мне бы хотелось, чтобы он работал, но я не могу передать переменную в свойство url таким образом. Хотя я, по общему признанию, довольно плохо знаком с ASP.NET MVC, похоже, что он должен быть довольно базовым, и все же я застрял на этом на минуту.

1 ответ

Решение

Я понимаю, что этому посту уже более года, но я хотел бы добавить более полный ответ, основанный на комментариях к первоначальному вопросу, на тот случай, если другие, как я, наткнуться на него.

В моем /Views/Shared/ папка у меня есть _YourPartialName.cshtml

В моем HomeController.cs Я имею:

[HttpPost]
public PartialViewResult AddPartialToView(string id)
{
    return PartialView(id);
}

В моем MainView.cshtml Я имею:

...
<div id="placeHolderDiv">          
</div>

<div class="form-group">
    <button class="btn" type="button" onclick="replaceContentsOfDiv(this.id)" id="_YourPartialName">Add A Partial View Above This</button>
</div>
...
<script>
    function replaceContentsOfDiv(partialViewToInsert) {
        $.ajax({
            url: '@Url.Action("AddPartialToView", "Home")',
            data: { id: partialViewToInsert},
            type: "POST",
            success: function(data) {
                $('#placeHolderDiv').html(data);
            }
        });
    }
</script>

Это приведет к:

<div id="placeHolderDiv">
    <whatever class="you had in your partial">
    </whatever>
</div>



Надеюсь это поможет.

Другие вопросы по тегам