MVC 3 использует частичное представление, чтобы добавить новый список с ajax - PullRequest
1 голос
/ 12 октября 2011

ПЕРЕСМОТРЕНО, НО ЖЕ ПРОБЛЕМА:

Я строю сайт с MVC 3 и столкнулся с большим дорожным блоком.На странице профиля пользователи смогут создавать новые списки, предлагаемые их центром.Я создал это, используя частичное представление для части страницы _CenterProfile, которая работает отлично.Я реализовал Create Listing в качестве основного фокуса страницы и модели, которая также отлично работает.Я хотел бы использовать Ajax для создания записей в базе данных, а также для заполнения или обновления списков, отображаемых на странице профиля.Вот тут и возникает проблема.

Когда я нажимаю кнопку «Отправить», а не обновляю целевой элемент, страница переходит на несуществующую страницу «CreateListing» ../Exchange/CreateListing.Я схожу с ума, пытаясь заставить это работать, и независимо от того, что я пытаюсь, это делает то же самое.Листинг заполняется в базе данных, и страница меняется с / Exchange / Profile на /Exchange/CreateListing.

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

Просмотр профиля:

      @model Exchange.Models.CreateListingModel

@{
    ViewBag.Title = "Profile";
}

<h2>Profile</h2>

@Html.Action("_CenterProfile")

<br />
@using (Ajax.BeginForm("CreateListing", "Exchange", new AjaxOptions
{
    HttpMethod = "Get",
    UpdateTargetId = "centerListings",
    InsertionMode = InsertionMode.Replace
}))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>CreateListingModel</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.productName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.productName)
            @Html.ValidationMessageFor(model => model.productName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.forSale)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.forSale)
            @Html.ValidationMessageFor(model => model.forSale)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.forTrade)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.forTrade)
            @Html.ValidationMessageFor(model => model.forTrade)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.price)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.price)
            @Html.ValidationMessageFor(model => model.price)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.unit)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.unit)
            @Html.ValidationMessageFor(model => model.unit)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.catagoryID)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.catagoryID)
            @Html.ValidationMessageFor(model => model.catagoryID)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.description)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.description)
            @Html.ValidationMessageFor(model => model.description)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.imageURL)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.imageURL)
            @Html.ValidationMessageFor(model => model.imageURL)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.activeListing)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.activeListing)
            @Html.ValidationMessageFor(model => model.activeListing)
        </div>
    </fieldset>

    <p>
        <input type="submit" value="CreateListing" />
    </p>
}

    <table id="centerListings">

    </table>


<p>
    @Html.ActionLink("Edit", "Edit", new { /* id=Model.PrimaryKey */ }) |
    @Html.ActionLink("Back to List", "Index")
</p>

Контроллер CreateListing:

public PartialViewResult CreateListing(CreateListingModel model)
{
    mmjc.CreateListing(model.catagoryID, model.productName, model.forSale, model.forTrade, model.price, model.unit, model.description, model.imageURL, model.activeListing);
    var listings = mmjc.GetCenterListings();
    return PartialView("_CenterListings", listings);
}

_CenterListings PartialView:

@model IEnumerable<Exchange.Models.Listing>

<table id="centerListings">
    <tr>
        <th>
            CatagoryID
        </th>
        <th>
            ProductName
        </th>
        <th>
            ToSell
        </th>
        <th>
            ToTrade
        </th>
        <th>
            PricePerUnit
        </th>
        <th>
            Unit
        </th>
        <th>
            Description
        </th>
        <th>
            ImgPath
        </th>
        <th>
            ProfileID
        </th>
        <th>
            ActiveListing
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CatagoryID)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ProductName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ToSell)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ToTrade)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.PricePerUnit)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Unit)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Description)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ImgPath)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ProfileID)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ActiveListing)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ListingsID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ListingsID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ListingsID })
        </td>
    </tr>
}

</table>

Ответы [ 3 ]

1 голос
/ 13 октября 2011

Хорошо, все. Так что я решил свою проблему здесь. Кажется, у многих людей есть такая же проблема. Исправление настолько легко, что заставило меня чувствовать себя очень глупо.

Все, что вам нужно сделать, это включить

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

В вашем _Layout или Main View. Без этого Ajax.BeginForm бесполезен и будет продолжать перенаправлять на PartialViewResult.

1 голос
/ 12 октября 2011

Я думаю, вы должны предоставить UpdateTargetId в вашем AjaxOptions:

new AjaxOptions { HttpMethod = "Post",
                  UpdateTargetId = "idOfSomeHtmlContainer" }

С помощью этого свойства вы указываете, какая часть страницы должна быть обновлена ​​с помощью ответа на вызов AJAX. Используя имеющийся у вас код, ASP.NET MVC не знает, какую часть страницы обновлять с помощью представления, возвращенного вашим методом действия.

0 голосов
/ 12 октября 2011

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

...