2

MVC と AJAX は初めてです。

現在、フォームを送信しているだけで、フォームのデータを使用して、ajax を使用して部分ビューでテーブルを更新したいと考えています。

私の_UserInfo部分的なビューは次のようになります。

@model IEnumerable<Dashboard.Models.UserInfo>
<table>
    <tr>
        <th>
           Firstname
        </th>
        <th>
           Lastname
        </th>
        <th>
            EmailAddress
        </th>
        <th>
        </th>
    </tr>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.firstName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.surname)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.emailAddress)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.SAMuserName)
        </td>
    </tr>
}
</table>

私の主なUserビューは次のようになります。

@model Dashboard.Models.User
@Scripts.Render("~/bundles/jqueryval")

@using (Ajax.BeginForm("_UserInfo", "User", new AjaxOptions()
                        {
                            HttpMethod = "GET",
                            UpdateTargetId = "results",
                            InsertionMode = InsertionMode.Replace
                        }))
{

    <fieldset>
    //...My Form 

        <p>
            <input type="submit" value="Find" />
        </p>
    </fieldset>
}

<div id="results">
</div>

そして最後にこれは私のものUserControllerです:

public PartialViewResult UserResults(User person)
{
    UserInfo personInfo = new UserInfo();

    //....Doing stuff

    return PartialView("_userInfo", personInfo);
}

今、私はこれがおそらく良くないことを知っています。しかし、これは私が少しの知識で試みた最高の試みです。

ユーザー ビューのボタンをクリックすると、_UserInfo が見つからないという 404 エラーが表示されます。

私の問題のすべての原因は、

 @using (Ajax.BeginForm("_UserInfo", "User", new AjaxOptions()
                        {
                            HttpMethod = "GET",
                            UpdateTargetId = "results",
                            InsertionMode = InsertionMode.Replace
                        }))

しかし、私の知識では、何が間違っているのかわかりません。


*編集: * ご指摘のとおり、HTML フォームを正しく作成していませんでした。それ以来、私はそれを

@using (Ajax.BeginForm("UserResults", "User", new AjaxOptions(){...}

私のアクションが呼び出されています!ただし、部分ビューが画面にロードされていません。

4

3 に答える 3

1

特定のオーバーロードの場合、最初の 2 つの文字列は ActionName と ControllerName MSDNです。そのため、次のようにコントローラーをミラーリングする必要があります。

@using (Ajax.BeginForm("userResults", "User", new AjaxOptions()
                    {
                        HttpMethod = "GET",
                        UpdateTargetId = "results",
                        InsertionMode = InsertionMode.Replace
                    }))

さらに、命名規則に従って、userResults の名前を UserResults に変更する必要があることに注意してください。

編集: Ajax.BeginForm (更新を参照) の両方を使用していることと、バンドルに ajax 控えめなスクリプトが含まれていることを確認してください。BundleConfig.RegisterBundles では、次のバンドルを追加する必要があります。

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.unobtrusive*"));

HTML で、両方のバンドルが呼び出されていることを確認してください。

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
于 2013-11-08T17:05:13.933 に答える