0

我是 MVC 4 和 Razor 引擎的新手——所以这可能是一个愚蠢的问题。

我想要实现的是我有一个带有下拉列表和按钮的页面。单击按钮调用控制器传递选定的值。控制器应该返回一个局部视图,并且应该只更新页面的底部。

但是,我发现整个页面仅被部分视图 html 替换。IE。我得到了我的结果列表显示,但我失去了我的项目下拉列表和提交按钮。我尝试包含对 jquery 和不显眼的脚本的引用(我认为在 MVC 4 中不需要),但这根本不会改变页面(即下拉列表和按钮留在那里并且没有结果显示)。

我的部分观点:

@using (Ajax.BeginForm("GetProjectStories", "MyController", new AjaxOptions{ UpdateTargetId = "projectUserStories"}))
{

    <fieldset>
        <legend>Select Project</legend>
        <div>
            @Html.DropDownList("ProjectReference", (IEnumerable<SelectListItem>)Model.ProjectList)
        </div>
        <p>
        <input name="GetStoriesButton" type="submit" value="Get Stories" />
        </p>
    </fieldset>
}

@if (Model != null && Model.UserStories != null)
{
    <div id="projectUserStories">
        @{Html.RenderPartial("_UserStoryList", Model);}
    </div>

}

我的控制器:

public ActionResult GetProjectStories(ProjectViewModel model)
        {

           var stories =  MyService.GetProjectUserStories(model.ProjectReference).Results;   
           model.UserStories = stories;
            return PartialView("_UserStoryList", model);
        }

我的部分视图内容只包含一个 html 表和对模型的引用。

4

2 回答 2

1

因此,我尝试包含该不显眼的脚本,并解决了如果该对象为空但它仍然无法正常工作时我没有渲染该 div 的事实。

所以我改用jquery。

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

    <script type="text/javascript">
            $(function () {
                $('form').submit(function () {
                    var url = "@Url.Action("GetProjectStories", "MyController")";
                    var data = { selectedProject: $('#ProjectReference').val() };

                    $("#projectUserStories").load(url, data, function() {
                    });
                    return false;
                });
            });

     </script>

        @using (Html.BeginForm())
        {
            <fieldset>
                <legend>Select Project</legend>
                <div>
                    @Html.DropDownList("ProjectReference", (IEnumerable<SelectListItem>) Model.ProjectList)
                </div>
                <p>
                    <input name="GetStoriesButton" type="submit" value="Get Stories" />
                </p>
            </fieldset>

            <div id="projectUserStories">
                @{ Html.RenderPartial("_UserStoryList", Model); }
            </div>
         }
于 2012-11-15T05:46:33.497 回答
1

您打算如何更新projectUserStories,如果无法呈现代码块,请尝试以下操作:

<div id="projectUserStories">
@if (Model != null && Model.UserStories != null)
{
   Html.RenderPartial("_UserStoryList", Model);
}
</div>

还要检查 Microsoft Ajax 帮助程序所需的所有 js 文件,例如:

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

还请看:

  1. 将 Ajax.BeginForm 与 A​​SP.NET MVC 3 Razor 一起使用
  2. MVC 3 - Ajax.BeginForm 做一个完整的回帖
于 2012-11-14T06:42:33.343 回答