MVC4 Ajax不呈现ActionLink

时间:2012-09-11 21:02:11

标签: c# .net asp.net-mvc-4

我来自webforms背景,此时我对MVC4感到非常沮丧。我一直在看例子,看视频,谷歌搜索等。似乎什么都没有用,我准备放弃,但是,这个网站非常有用,所以我要看看能否得到一些帮助。

我想做的是:

  1. 使用jQuery标签创建一个页面(easytabs)(这是btw完成的)
  2. 在标签点击事件中,我希望如此 通过ajax重新加载标签
  3. 在网络表格中,我会在早上8点完成。我现在坚持这个和下午5点。沮丧得无法相信。

    我关注了MVC4网站上的网络视频教程,这个可爱的例子是在Razor中,我不想使用它,但是,我仍然会依据它来获取知识:

    http://www.asp.net/mvc/overview/javascript
    - > 'Javascript和Ajax' - > http://pluralsight.com/training/players/PSODPlayer?author=scott-allen&name=mvc3-building-ajax&mode=live&clip=0&course=aspdotnet-mvc3-intro

    在我的easytabs中,在HTML中,我将我的html定义为:

    <li class="tab"><a href="#tabs-users" class="light heavy">Manage Sections</a></li>
    

    因此,在视频之后,我尝试通过ajax帮助程序创建并使用ajax属性锚定标记来替换此HTML:

     <% Ajax.ActionLink("Manage Sections", "tabsUsers", new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "tabs-users", InsertionMode = InsertionMode.Replace }); %>
    

    这使得NOTHING。它不会在页面上呈现它。所以,我去打猎,发现我需要以下内容:

    <%: Scripts.Render("~/bundles/jqueryval") %>
    

    此捆绑包包含' jquery.unobtrusive-ajax.min.js '以及web.config中的设置:

    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    

    仍然没有。

    原始HTML

    <div id="tab-container" class="tab-container">
        <ul class="etabs">
            <li class="tab upper first"><a href="#tabs-users" class="light heavy">Manage Users</a></li>
            <li class="tab upper"><a href="#tabs-groups" class="light heavy">Manage Sections</a></li>
        </ul>
        <div id="tabs-users" class="normal light clearfix">
            Users
        </div>
        <div id="tabs-groups" class="normal light clearfix">
            Groups
        </div>
    </div>
    

    我感觉Ajax.ActionLink不喜欢在那里渲染锚标记,但我不知道为什么。

    控制器

        [HttpGet]
        public PartialViewResult tabsUsers()
        {
            IEnumerable<SelectListItem> items = UserManager.GetUsers()
                .Select(c => new SelectListItem
                {
                    Value = c.UserID.ToString(),
                    Text = c.FirstName + c.LastName
                });
    
            return PartialView("UsersPartial", items);
        }
    

    UsersPartial View

        <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<LMS.Data.User>>" %>
    
    <table>
        <tr>
            <th>
                <%: Html.DisplayNameFor(model => model.UserName) %>
            </th>
            <th>
                <%: Html.DisplayNameFor(model => model.FirstName) %>
            </th>
            <th>
                <%: Html.DisplayNameFor(model => model.LastName) %>
            </th>
            <th>
                <%: Html.DisplayNameFor(model => model.Password) %>
            </th>
            <th>
                <%: Html.DisplayNameFor(model => model.Email) %>
            </th>
            <th></th>
        </tr>
    
    <% foreach (var item in Model) { %>
        <tr>
            <td>
                <%: Html.DisplayFor(modelItem => item.UserName) %>
            </td>
            <td>
                <%: Html.DisplayFor(modelItem => item.FirstName) %>
            </td>
            <td>
                <%: Html.DisplayFor(modelItem => item.LastName) %>
            </td>
            <td>
                <%: Html.DisplayFor(modelItem => item.Password) %>
            </td>
            <td>
                <%: Html.DisplayFor(modelItem => item.Email) %>
            </td>
            <td>
                <%: Html.ActionLink("Edit", "Edit", new { id=item.UserID }) %> |
                <%: Html.ActionLink("Details", "Details", new { id=item.UserID }) %> |
                <%: Html.ActionLink("Delete", "Delete", new { id=item.UserID }) %>
            </td>
        </tr>
    <% } %>
    
    </table>
    

    运行时呈现的脚本部分

            <script src="/Scripts/jquery-1.6.2.js" type="text/javascript"></script>
    
            <script src="/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>
    <script src="/Scripts/jquery.validate.js" type="text/javascript"></script>
    <script src="/Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>
    
            <script src="/Scripts/jquery-ui-1.8.11.js" type="text/javascript"></script>
    
            <script src="/Scripts/jquery.easytabs.min.js" type="text/javascript"></script>
    <script src="/Scripts/script.js" type="text/javascript"></script>
    

    任何想法?我真的想在这里给MVC一个有价值的镜头,但它对我来说并不是很好。

1 个答案:

答案 0 :(得分:2)

  

这使得NOTHING。它不会在页面上呈现它。

那是因为正确的语法如下:

<%= Ajax.ActionLink("Manage Sections", "tabsUsers", new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "tabs-users", InsertionMode = InsertionMode.Replace }) %>

很长一段时间WebForms用户在早上8点完成工作,您应该知道<%=用于将结果输出到响应,而最后<%;只是执行服务器上的命令没有输出任何内容。