asp.net mvc中使用ajax传统的方法与mvc中方法,高手可以帮忙解释一下么?

finer 2017-12-21 08:26:53
下面代码中,传统的我感到就是无刷新更新服务器的内容,但MVC中的方法,则是跳到一个新页面去了,感觉就是刷新的更新啊,不懂,求指导,谢谢!

Ajax.cshtml

@{
ViewBag.Title = "Ajax Page";
//下面引用Jquery和unobtrusive-ajax
}
@Scripts.Render("~/bundles/jquery")
@{
//设置ajaxOptions
var ajaxOptions = new AjaxOptions()
{
OnSuccess = "SetPassSuccess",
OnFailure = "SetPassFailure",
Confirm = "设置留言审核状态为'通过'?",
HttpMethod = "Post"
};
}
<script type="text/javascript">
$(function () {
$("#alink").click(function () {
$.get("/Home/GetTime", function (response) {
$("#showInfo").html(response);
});
});
});
function SetPassSuccess() {
alert('审核通过');
location.reload();
}
function SetPassFailure(xhr) {
alert('审核失败(HTTP状态代码:' + xhr.status + ')');
}
</script>


<div class="jumbotron">
<h1>ASP.NET</h1>
</div>

<div class="row">
<div class="col-md-4">
<a id="alink" href="javascript:void(0);">①传统方式Ajax</a><br />
@Ajax.ActionLink("②MVC中使用Ajax", "GetTime", new AjaxOptions { UpdateTargetId = "showInfo" })<br />

@using (Ajax.BeginForm("GetPostStr", new AjaxOptions { UpdateTargetId = "showInfo" }))
{
<input type="text" name="username" /><br />
<input type="text" name="userage" /><br />
<input type="submit" value="③MVC Post方式提交Ajax" />
}
<br />

@Ajax.ActionLink("MVC中Ajax请求带回调执行", "ConfirmPass", new { id = 1 }, ajaxOptions)<br />

<div id="showInfo">更新区域</div>

@Ajax.ActionLink("Ajax删除数据", "DeleteUser", "Home", new { id = 1 },
new AjaxOptions()
{
UpdateTargetId = "strcontent",
HttpMethod = "Post",
Confirm = " 您确定要删除该记录吗?该操作不可恢复!"
})
</div>
</div>
@Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.js")


HomeController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace WebAppAjax.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}

public ActionResult About()
{
ViewBag.Message = "Your application description page.";

return View();
}

public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";

return View();
}

public ActionResult Ajax()
{
return View();
}

/// <summary>
/// 获取系统时间 强制不缓存
/// </summary>
/// <returns></returns>
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult GetTime()
{
return Content("Now,the time is "+DateTime.Now.ToString());
}

[HttpPost]
public ActionResult GetPostStr(FormCollection form)
{
string userName = form["username"];
string userAge = form["userage"];
return Content(userName + userAge);
}

/// <summary>
/// 删除用户
/// </summary>
/// <returns></returns>
[HttpPost]
public ActionResult DeleteUser()
{
//省略操作部分
return JavaScript("alert('删除成功')");
}

public ActionResult ConfirmPass(int id)
{
//省略操作部分
return new HttpStatusCodeResult(System.Net.HttpStatusCode.OK);
}
}
}
...全文
645 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mirrorspace 2017-12-22
  • 打赏
  • 举报
回复
以前WEBFORM.这种是将WINFORM弄到WEB上.界面和后台一起由开发人员完成.那时前端还没有这么多的技术可选 后来MVC,界面和数据分开,视图可以接受数据然后绑定上.此时不用管界面了,界面可以方便更换.那时前端已经有很多很酷的交互了.再用WINFORM就复杂多了 现在"云+端",不管是什么界面,WEB,原生都由前端人员完成.服务端只返回数据就行了.界面和后台完全分开了.WEBAPI+(H5/JS 安卓 IOS)
五更琉璃 2017-12-22
  • 打赏
  • 举报
回复
这和 MVC 无关 所谓跳转页,就是 客户端用Submit 提交了。
sdfgrtyu 2017-12-22
  • 打赏
  • 举报
回复
<div> @foreach (string role in Enum.GetNames(typeof(Role))) { <div class="ajaxLink"> @Ajax.ActionLink(role, "GetPeople", new { selectedRole = role }, new AjaxOptions { UpdateTargetId = "tableBody", Url = Url.Action("GetPeopleData",new { selectedRole = role }) }) </div> } </div>
sdfgrtyu 2017-12-22
  • 打赏
  • 举报
回复
public PartialViewResult GetPeopleData(string selectedRole="All") { IEnumerable<Person> data = new List<Person> { }; if (selectedRole != "All") { Role seleted = (Role)Enum.Parse(typeof(Role), selectedRole); data = data.Where(p => p.Role == seleted); } return PartialView(data); } AjaxOptions ajaxOptions = new AjaxOptions { UpdateTargetId = "", Url = Url.Action("") };
正怒月神 版主 2017-12-22
  • 打赏
  • 举报
回复
我没怎么使用ajax.form的方法。而是习惯手动ajax访问。 不过估计原理上是一样的。
sdfgrtyu 2017-12-22
  • 打赏
  • 举报
回复
Role selected=(Role)Enum.Parse(typeof(Role),selectedRole); 链接到指定的动作/控制器Html.ActionLink(" "," ","") MVC框架包含了对渐进式AJax内建的支持,这意味着你将使用辅助器方法来定义Ajax特性,而不必在整个视图中添加代码块。
  • 打赏
  • 举报
回复
说完技术背景技术选型问题,回到你需要“解释”的表面问题上来,asp.net mvc 所翻译的代码非常浅显,你应该调试一下前端 html 源代码来看看 @Ajax.ActionLink(....)、 @using (Ajax.BeginForm(....) 之类的代码产生什么输出,就知道自己如何理解其机制。asp.net mvc 没有什么深度知识(没有复杂的服务器端控件体系),所以你可以用、也可以完全不用它来产生这些前端代码。 要真机调试发现什么“跳转页面”的原因,你应该贴出它的浏览器端 html 源代码的片段,而并不是只贴出 asp.net mvc 端的代码。我们看一个人会不会开发,都是看他会不会贴出调试画面,而不是看他会不会贴源代码。
  • 打赏
  • 举报
回复
如果你打算像我们一样专注开发 web 企业前端应用软件(跨手机、平板、各种操作系统的 pc 桌面),那么站在一个前端开发者的角度来看众多 asp.net mvc 教程和论坛上的问题,发现只有不足几十分之一的设计开发能力,而 c# 代码却冗余复杂几十倍,真的发现 不论是 asp.net 还是别的什么服务器端 web 页面编程的复杂模式,这都是一条错误的、不合现在潮流的的学习之路。
  • 打赏
  • 举报
回复
MVC 本身是刷新绑定整个界面(子界面)的意思。 你所谓“传统的方法”,实际上这是最近5、6年流行的前端方法,它使用 ajax 只是访问后台数据服务,然后渲染全都是 js/html/css 前端技术的事情。那么此时 (asp.net) mvc 中的 V 完全不存在了,c也就是残废了。所以如果你真的用前端技术,那么就该扔掉 asp.net mvc 中的服务器端界面编程技术,你的前端访问 ashx/一般处理 服务就行了,还访问什么页面? 10年前,我在csdn 上写过一个例子,将页面中的局部内容从服务器端刷新产生然后把 html 发送到客户端更新。然后不几天我就彻底醒悟了,这种东西是坑爹的,有着一大堆的前端架构设计冲突。从那以后我就知道,既然是前端用代码来开发,那么前端就访问后台数据服务,才是合适的 web 前端应用技术架构方式。 回到 asp.net mvc来说,它抄了 struct 刚刚没几年,web 前端架构技术爆发了,于是它不得不把各种东西都往 ajax 上面靠拢。实际上这就相当于一个人花了10年时间学了京剧表演,而他现在从事的是淘宝上卖男装的工作,基本上用不上。
finer 2017-12-22
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
Ajax.ActionLink 这个会自动生成ajax代码 相当于jq里的 $ajax.Post()
看到执行Ajax.ActionLink时,浏览器的地址栏变了,整个页面也变成了新一页,原来的内容没了,不像是内容更新在 UpdateTargetId = "showInfo" 设置中的showinfo(div)里呢
threenewbee 2017-12-22
  • 打赏
  • 举报
回复
Ajax.ActionLink 这个会自动生成ajax代码 相当于jq里的 $ajax.Post()

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧