tinymce在mvc 3 razor中,Ajax.ActionLinks在第一次Ajax调用后失败
我正在asp.net mvc 3 Razor应用程序中使用Tinymce。ActionLink通过调用名为“GetContent”的控制器操作加载tinymce编辑器。GetContent方法从文件系统加载文本文件。一切都很好。但是,在通过$.ajax调用保存tinymce文本之后,ajax.ActionLink不再触发控制器方法。换句话说,$.ajax帖子中的某些内容会破坏客户端上的ajax.ActionLink,使其不再调用GetContent控制器操作 有趣的是,Ajax.ActionLink仍然从浏览器缓存加载tinymce编辑器。在下面的示例中,我有两个链接“FileOne”和“FileTwo”,它们加载两个不同的文本文件。在调用$.ajax之前,链接从磁盘加载文件。调用$.ajax后,链接从浏览器缓存加载最后一个“FileOne”或“FileTwo” 这就是观点。$.ajax post出现在tiny_mce_save_click()函数中,该函数连接到tinymce save按钮click:tinymce在mvc 3 razor中,Ajax.ActionLinks在第一次Ajax调用后失败,ajax,asp.net-mvc,razor,tinymce,Ajax,Asp.net Mvc,Razor,Tinymce,我正在asp.net mvc 3 Razor应用程序中使用Tinymce。ActionLink通过调用名为“GetContent”的控制器操作加载tinymce编辑器。GetContent方法从文件系统加载文本文件。一切都很好。但是,在通过$.ajax调用保存tinymce文本之后,ajax.ActionLink不再触发控制器方法。换句话说,$.ajax帖子中的某些内容会破坏客户端上的ajax.ActionLink,使其不再调用GetContent控制器操作 有趣的是,Ajax.ActionLi
@model TestTinyMCE.Models.HomeModel
@{
ViewBag.Title = "Home Page";
}
@section JavaScript
{
<script src="@Url.Content("~/Scripts/tiny_mce/jquery.tinymce.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script type="text/javascript">
$().ready(function () {
init_tiny_mce();
});
function init_tiny_mce() {
$('textarea.tinymce').tinymce({
// Location of TinyMCE script
script_url: '/Scripts/tiny_mce/tiny_mce.js',
//javascript function called when tinymce save button is clicked.
save_onsavecallback: "tiny_mce_save_click",
encoding: "xml",
theme: "advanced",
plugins: "save",
theme_advanced_buttons1: "save",
theme_advanced_toolbar_location: "top"
});
}
function tiny_mce_save_click(tinyMceInstance) {
$.ajax({
type: 'POST',
url: '/Home/SaveContent',
data: $('form').serialize(),
success: function (data, status, xml) {
$('#results').html(data);
},
error: function (xml, status, error) {
$('#results').html(error);
}
});
return false;
}
</script>
}
@using (Html.BeginForm())
{
<ul>
@foreach (string fileName in Model.FileList)
{
<li>@Ajax.ActionLink(fileName, "GetContent", new { FileName = fileName }, new AjaxOptions() { UpdateTargetId = "divContent" })</li>
}
</ul>
<div id="divContent">
@Html.Partial("GetContent", Model)
</div>
}
问题在于broswer缓存。要防止在Ajax.ActionLink上进行缓存,必须添加AjaxOption HttpMethod=“POST”。在上面的代码中,将ActionLink更改为
<li>@Ajax.ActionLink(fileName, "GetContent", new { FileName = fileName }, new AjaxOptions() { UpdateTargetId = "divContent", HttpMethod = "POST" })</li>.
@Ajax.ActionLink(文件名,“GetContent”,新的{fileName=fileName},新的AjaxOptions(){UpdateTargetId=“divContent”,HttpMethod=“POST”}) 。
请参阅找到了答案--必须通过添加AjaxOption HttpMethod=“POST”来防止在Ajax.ActionLink上进行缓存。在上面的代码中,将ActionLink更改为
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TestTinyMCE.Models;
namespace TestTinyMCE.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new HomeModel());
}
public ActionResult GetContent(HomeModel homeModel)
{
if (!string.IsNullOrEmpty(homeModel.FileName))
{
string path = string.Format("~/App_Data/{0}.htm", homeModel.FileName);
string physicalPath = Server.MapPath(path);
if (!System.IO.File.Exists(physicalPath))
homeModel.Content = string.Format("The file '{0}' does not exist.", physicalPath);
else
homeModel.Content = System.IO.File.ReadAllText(physicalPath);
}
return View(homeModel);
}
[HttpPost]
[ValidateInput(false)]
public ActionResult SaveContent(HomeModel homeModel)
{
string path = string.Format("~/App_Data/{0}.htm", homeModel.FileName);
string physicalPath = Server.MapPath(path);
System.IO.File.WriteAllText(physicalPath, homeModel.Content);
ViewBag.Result = "The file was successfully saved.";
return View();
}
}
}
<li>@Ajax.ActionLink(fileName, "GetContent", new { FileName = fileName }, new AjaxOptions() { UpdateTargetId = "divContent", HttpMethod = "POST" })</li>.