C# 使用Ajax更新部分页面

C# 使用Ajax更新部分页面,c#,ajax,asp.net-mvc,razor,C#,Ajax,Asp.net Mvc,Razor,使用ASP.NETMVC5,我试图让一个菜单系统工作,点击一个条目可以更新页面的一部分,而无需进行完整的页面刷新。我的问题是Ajax调用可以工作,但是如果我在操作中使用“returnview()”,则会刷新整个页面;我尝试了“return PartialView()”,但这会产生一个只呈现部分视图的新页面 菜单位于_Layout.cshtml中,菜单项为: @Ajax.MyActionLink( "<span class='fa fa-image'></span> A

使用ASP.NETMVC5,我试图让一个菜单系统工作,点击一个条目可以更新页面的一部分,而无需进行完整的页面刷新。我的问题是Ajax调用可以工作,但是如果我在操作中使用“returnview()”,则会刷新整个页面;我尝试了“return PartialView()”,但这会产生一个只呈现部分视图的新页面

菜单位于_Layout.cshtml中,菜单项为:

@Ajax.MyActionLink(
  "<span class='fa fa-image'></span> Address Book",
  "Test",
  "Test",
  new AjaxOptions {
    UpdateTargetId = "page-content",
    InsertionMode = InsertionMode.Replace,
    HttpMethod = "GET",
  }
)
@Ajax.MyActionLink(
“通讯录”,
“测试”,
“测试”,
新选择{
UpdateTargetId=“页面内容”,
InsertionMode=InsertionMode.Replace,
HttpMethod=“GET”,
}
)
MyActionLink如下:(从我在这里找到的一些代码中稍微修改)

公共静态IHtmlString MyActionLink(
这个AjaxHelper AjaxHelper,
字符串链接文本,
字符串actionName,
字符串控制器名称,
AjaxOptions(AjaxOptions)
{
var targetUrl=UrlHelper.GenerateUrl(null,actionName,controllerName,null,ajaxHelper.RouteCollection,
ajaxHelper.ViewContext.RequestContext,true);
返回MvcHtmlString.Create(ajaxHelper.GenerateLink(linkText,targetUrl,ajaxOptions??new ajaxOptions(),null));
}
私有静态字符串生成器(
这个AjaxHelper AjaxHelper,
字符串链接文本,
字符串targetUrl,
AjaxOptions AjaxOptions,
I词典(赠品)
{
var a=新标记生成器(“a”){
InnerHtml=linkText
};
a、 合并属性(htmlAttributes);
a、 合并属性(“href”,targetUrl);
a、 合并属性(ajaxOptions.ToUnobtrusiveHtmlAttributes());
返回a.ToString(TagRenderMode.Normal);
}
目标如下:

<div class="page-content-wrap" id="page-content">
  @RenderBody()
</div>

@RenderBody()
控制器和视图是:

public class TestController : Controller {
    public ActionResult Test() {
        return View();
    }
}


<p>
    <h1 >Hopfully this test will work!</h1>
    <br />
    <br/>
    <p align="center">Partial View!</p>
</p>
公共类TestController:Controller{
公共行动结果测试(){
返回视图();
}
}

希望这个测试能成功!


局部视图


谢谢

我猜使Ajax调用工作所需的javascript库丢失/未加载。没有它们,单击链接不会被捕获,链接就像正常链接一样工作。

谢谢David,但没有工作。我引用了jquery.unobtrusive-ajax.min.js,尝试返回View和PartialView,结果与之前相同。jquery是否也包含?是的,脚本如下:jquery-2.1.1.min.js,jquery.unobtrusive-ajax.min.js,jquery-ui.min.js,bootstrap.min.js你的html看起来像什么?它应该是这样的:在这里可以正常工作,除非缺少jquery或jquery.unobtrusive-ajax。您是否有机会更新jquery,但没有更新jquery.unobtrusive-ajax?我将一个测试项目更新为jQuery2.1.1,然后它也被破坏了。更新jquery.ubobtrusive.ajax后,它又起作用了。不完全确定
MyActionLink()
应该做什么,这是标准的
@ajax.MyActionLink()
做不到的(或者更好的是,只使用jquery的
.get()
.load()
函数)但是,您应该比较您的方法和内置方法呈现的html,并检查是否有任何差异,特别是
数据ajax
属性MyActionLink要正确呈现标记,我与@ajax.ActionLink()的行为相同。不幸的是,我不是网页设计师,所以jQuery等不是我的强项,我只是把它混为一谈,:(如果您使用
@Ajax.ActionLink()
获得相同的结果,那么
jQuery.unobtrusive Ajax.js
或您禁用了unobtrusive validation,请检查
web.config
public class TestController : Controller {
    public ActionResult Test() {
        return View();
    }
}


<p>
    <h1 >Hopfully this test will work!</h1>
    <br />
    <br/>
    <p align="center">Partial View!</p>
</p>