当我发现 vsdocs 文件时,我想到了一种在我的 JQuery 文件中使用智能感知的方法来操作我将发送到我的 ASP.net MVC 后端的对象。
类似于 MVC 模型,但仅适用于 JQuery Ajax 回调。
以下 JQuery 方法在此处可用,用于将单击的元素 html 自定义标记传输到旨在提供 ajax 回调的对象:来自 html 对象的参数在显示确认对话框时被传输到内存中保存的对象。
$.fn.MenuItemConfirmRemove = function (evt) {
savedEvt = evt;
RemoveLayoutMenu_JSonModel.DirectURL = $(this).attr("data-DirectURL"),
RemoveLayoutMenu_JSonModel.LayoutMenu_Translation_Id = $(this).attr("data-id"),
RemoveLayoutMenu_JSonModel.LayoutMenuTranslationLayoutMenuParent = $(this).attr("data-LayoutMenuTranslationLayoutMenuParent")
MenuItemAction = RemoveLayoutMenu_JSonModel;
$.fn.jqDialogConfirm(cap_RemoveMenuItemConfirmTitle, cap_RemoveMenuItemConfirmMessage, cap_RemoveMenuItemConfirmOkButtonTitle, cap_RemoveMenuItemConfirmCancelButtonTitle, "$.fn.MenuItemRemove");
evt.preventDefault();
}
$.fn.MenuItemRemove 是用户单击确定按钮时通用对话框调用的方法。 通用对话框可在此处获得
$.fn.MenuItemRemove = function () {
$('#dialogMessage').dialog('close');
ajaxData = JSON.stringify(MenuItemAction);
$.ajax(
{
type: "POST",
url: "/DynaStructure/LayoutMenuItemRemoveItem/" + $("#hidLanguage").val(),
data: ajaxData,
contentType: "application/json",
async: false,
success: $.fn.MenuUpdated,
error: function (xhr, ajaxOptions, thrownError) {
$.fn.jqDialogAlert(DialogErrorTitle, (xhr.responseText));
}
});
}
如您所见,在加载并打开确认对话框之前,已填充 MenuItemAction。
MenuItemAction(全局声明)填充了 RemoveLayoutMenu_JSonModel
然后,在控制器中,我必须使用 C# 对象来接收这个 JQuery 对象,如下所示:
/// <summary>
/// Remove a menu
/// Warning, Removing a Menu remove also its translations
/// </summary>
/// <param name="layoutMenu"></param>
/// <returns></returns>
[HttpPost, Authorize(Roles = "Admin")]
public JsonResult LayoutMenuItemRemoveItem(string language, RemoveLayoutMenu_JSonModel ajaxModel)
{
JsonResult toReturn = new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet };
string eMethod = eMethodBase + "LayoutMenuItemRemoveItem[POST]";
object eParameters = new { ajaxModel = ajaxModel };
string defaultLanguage = ConfigurationManager.AppSettings["DefaultLanguage"];
MembershipUser currentUser = Membership.GetUser();
LayoutMenu_Translation dbLayoutMenu_Translation;
using (DataRepositories _dataContext = new DataRepositories())
{
Language dbLanguage = _dataContext.Language_Rep.Query(x => x.Description == language).FirstOrDefault();
if (dbLanguage == null)
{
throw new INNOVACALL.Framework.Common.InnovacallExceptions.DataIntegrityException(eMethod, eParameters, string.Format(Resources.ErrMsg_LayoutMenuItemRemove_UnknownLanguage, language));
}
using (TransactionScope TS = new TransactionScope())
{
try
{
if (ajaxModel.LayoutMenuTranslationLayoutMenuParent == null)
{
dbLayoutMenu_Translation = _dataContext.LayoutMenu_Translation_Rep.Query(x => x.Id == ajaxModel.LayoutMenu_Translation_Id && x.LayoutMenu.FK_LayoutMenu == null).FirstOrDefault();
}
else
{
dbLayoutMenu_Translation = _dataContext.LayoutMenu_Translation_Rep.Query(x => x.Id == ajaxModel.LayoutMenu_Translation_Id && x.LayoutMenu.FK_LayoutMenu == ajaxModel.LayoutMenuTranslationLayoutMenuParent).FirstOrDefault();
}
if (dbLayoutMenu_Translation == null)
{
INNOVACALL.Framework.Common.InnovacallExceptions.DataIntegrityException iex = new INNOVACALL.Framework.Common.InnovacallExceptions.DataIntegrityException(eMethod, eParameters, Resources.DynaStructure_MenuAction_MenuNotFound);
iex.LogIt();
throw iex;
}
LayoutMenu dbLayoutMenu = dbLayoutMenu_Translation.LayoutMenu;
//We check if parent LayoutMenu has child
if (dbLayoutMenu_Translation.LayoutMenu.LayoutMenu1.Count > 0)
{
toReturn.Data = new { @success = false, @divToUpdate = "", @html = "", @scriptToExecute = "$.fn.jqDialogAlert('My Pretty CMS',a.message,'');", @message = Resources.DynaStructure_RemoveMenu_MenuHasChildren };
}
else
{
string[] tLanguages = ConfigurationManager.AppSettings["Languages"].Split(',');
foreach (string currentLanguage in tLanguages)
{
Language dbCurrentLanguage = _dataContext.Language_Rep.Query(x => x.Description == currentLanguage).FirstOrDefault();
if (dbCurrentLanguage == null) throw new INNOVACALL.Framework.Common.InnovacallExceptions.DataIntegrityException(eMethod, eParameters, Resources.Err_LanguageNotFound);
dbLayoutMenu_Translation = dbLayoutMenu.LayoutMenu_Translation.Where(x => x.FK_Language == dbCurrentLanguage.Id).FirstOrDefault();
if (dbLayoutMenu_Translation != null)
{
List<int> Structure_PagesIdsToKill = _dataContext.Structure_Page_Rep.Query(x => x.FK_LayoutMenu_Translation == dbLayoutMenu_Translation.Id).Select(x => x.Id).ToList();
foreach (int Structure_PagesIdToKill in Structure_PagesIdsToKill)
{
Structure_Page dbStructure_PageToKill = _dataContext.Structure_Page_Rep.GetById(Structure_PagesIdToKill);
ManagedContent toRemove = dbStructure_PageToKill.ManagedContent.SingleOrDefault();
if (toRemove != null)
{
_dataContext.ManagedContent_Rep.Remove(toRemove);
_dataContext.Save();
_dataContext.Structure_Page_Rep.Remove(dbStructure_PageToKill);
_dataContext.Save();
}
}
_dataContext.LayoutMenu_Translation_Rep.Remove(dbLayoutMenu_Translation);
_dataContext.Save();
}
}
string layoutMenuNameToRemove = dbLayoutMenu.Name;
_dataContext.LayoutMenu_Rep.Remove(dbLayoutMenu);
_dataContext.Save();
Logger.Info(enLog.Business, string.Format("User [{0}] removed layout menu [{1}]", (currentUser == null ? "#Anonymous#" : currentUser.UserName), layoutMenuNameToRemove));
}
TS.Complete();
}
catch (INNOVACALL.Framework.Common.InnovacallExceptions.DataIntegrityException iex)
{
TS.Dispose();
toReturn.Data = new { @success = false, @scriptToExecute = "$.fn.jqDialogAlert('My Pretty CMS',a.message,'');", @message = iex.Message };
return toReturn;
}
catch (Exception ex)
{
TS.Dispose();
INNOVACALL.Framework.Common.InnovacallExceptions.CommonException iex = new INNOVACALL.Framework.Common.InnovacallExceptions.CommonException(eMethod, eParameters, ex.Message);
iex.LogIt();
toReturn.Data = new { @success = false, @scriptToExecute = "$.fn.jqDialogAlert('My Pretty CMS',a.message,'');", @message = ex.Message };
return toReturn;
}
}
string newMenuBar = RenderMenuBar(_dataContext, dbLanguage, defaultLanguage);
toReturn.Data = new { @success = true, @divToUpdate = "#divMenuBar", @html = newMenuBar, @scriptToExecute = "$.fn.DocReady();", @message = "" };
}
return toReturn;
}
我再说一遍,这个问题...
您是否尝试过基于 C# 类生成 JSon 对象并在使用时使用它来查看您的 javascript 代码中的智能感知?