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);
}

现在我知道这可能不好。但这是我用我的小知识尝试过的最好的尝试。

当我单击用户视图上的按钮时,我收到一个 404 错误,提示找不到 _UserInfo。

我相信我所有问题的根源在于

 @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

对于您的特定重载,前两个字符串是 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 回答
1

你需要使用 Ajax.BeginForm 而不是 Html.BeginForm

@using (Ajax.BeginForm("userResults", "User", new AjaxOptions()
                {
                    HttpMethod = "GET",
                    UpdateTargetId = "results",
                    InsertionMode = InsertionMode.Replace
                }));
于 2013-11-08T17:40:14.030 回答
0

代码看起来不错。是否需要添加脚本:

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

@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>

现在,您的代码可以工作了。

于 2013-11-08T20:33:41.997 回答