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);
}
}
}
...全文
665 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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()
An outstanding author team presents the ultimate Wrox guide to ASP.NET MVC 4 Microsoft insiders join giants of the software development community to offer this in-depth guide to ASP.NET MVC, an essential web development technology. Experienced .NET and ASP.NET developers will find all the important information they need to build dynamic, data-driven websites with ASP.NET and the newest release of Microsoft's Model-View-Controller technology. Featuring step-by-step guidance and lots of code samples, this guide gets you started and moves all the way to advanced topics, using plenty of examples. Designed to give experienced .NET and ASP.NET programmers everything needed to work with the newest version of MVC technology Expert author team includes Microsoft ASP.NET MVC insiders as well as leaders of the programming community Covers controllers, views, models, forms and HTML helpers, data annotation and validation, membership, authorization, security, and routing Includes essential topics such as Ajax and jQuery, NuGet, dependency injection, unit testing, extending MVC, and Razor Includes additional real-world coverage requested by readers of the previous edition as well as a new case study example chapter 下面是上一版书的文介绍 《ASP.NET MVC 3 高级编程》主要内容是描述视图的概念,探讨Razor语法、NuGet、单元测试等,解释控制器在MVC框架的作用,以及模型在绑定和数据访问策略发挥的作用,演示如何显示和处理表单,涵盖添加到April 2011 Tools Update的新特性,如基架和HTML5项目模板,展示在客户端和服务器端验证模型的过程给出利用成员资格、援权和安全特性的忠告,讲解将TDD应用于ASP.NET MVC方法

62,248

社区成员

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

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

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

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