У меня есть вид сетки div в html, в котором я делаю некоторые записи. Если щелкнуть по редактированию, откроется всплывающее окно, и пользователь сможет отредактировать запись, и данные будут сохранены в базе данных. После сохранения данных моя сетка должна обновиться.ajax jquery post не работает в mvc
Все эти вызовы контроллерам mvc, которые мы используем с помощью ajax, но сетка не освежает. какая-то проблема в ajay post, метод успеха для «refreshRules» никогда не запускается, когда он отлично работает для других действий, таких как «saveMetricRule», «metricruleeditor»
Может кто-нибудь посоветует мне, что я делаю неправильно здесь?
ниже является JQuery код блока:
var m_oConfig = {
editMetricRule: {
ds: "/stealth/metricruleeditor",
p: function (config, elem) { return YAHOO.stealth.editMetricRuleP(config, elem); },
s: function (axn, config, elem, data, textStatus, jqXHR) { YAHOO.stealth.editRuleS(axn, config, elem, data, textStatus, jqXHR); }
},
saveMetricRule: {
ds: "/stealth/saveMetricRule",
p: function (config, elem) { return YAHOO.stealth.saveMetricRuleP(config, elem); },
s: function (axn, config, elem, data, textStatus, jqXHR) { YAHOO.stealth.saveMetricRuleS(axn, config, elem, data, textStatus, jqXHR); }
},
refreshRules: {
ds: "/stealth/metricsrefresh",
p: function (config, elem) { return YAHOO.stealth.refreshRulesP(config, elem); },
s: function (axn, config, elem, data, textStatus, jqXHR) { YAHOO.stealth.refreshRulesS(axn, config, elem, data, textStatus, jqXHR); }
}
refreshRulesP: function (config, elem) {
return {
gid: $(elem).attr("data-gid"),
};
},
refreshRulesS: function (axn, config, elem, data, textStatus, jqXHR) {
var sRoot = "rules";
$("#" + sRoot).replaceWith(data);
YAHOO.stealth.bindMetricGrids(sRoot);
},
saveMetricRuleP: function (config, elem) {
var sErrMsg = "There are errors in the rule.";
//rErr class added during any change
if ($(".rErr").length) {
//update rule pop-in
YAHOO.stealth.ErrHndlr(sErrMsg, "pnlRuleError");
//cancel ajax (and update actual page)
throw "";
}
//return the rule
return {
rule: YAHOO.stealth.getRuleObj()
};
},
saveMetricRuleS: function (axn, config, elem, data, textStatus, jqXHR) {
//close the pop-in
CSUtils.DisablePop();
//refresh the rules
YAHOO.stealth.loadNaked("refreshRules", null, elem);
//Indicate to user that they must run the rules
YAHOO.stealth.needRuleRun(data.msg, elem);
},
loadNaked: function (axn, config, elem) {
if (BlockAjax
|| (!axn || axn == "")) { return; }
var oAxn = m_oConfig[axn];
try {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: oAxn.ds,
data: JSON.stringify(oAxn.p(config, elem)),
success: function (data, textStatus, jqXHR) {
alert('s');
//if they defined a success function (s), call it with all the init and return data
if (typeof oAxn.s === "function") {
oAxn.s(axn, config, elem, data, textStatus, jqXHR)
}
//any dependent actions need to be called as well
if (oAxn.deps && oAxn.deps.length > 0) {
$.each(oAxn.deps, function (idx, dep) {
YAHOO.stealth.loadNaked(dep, config, elem);
});
}
},
error: function (err, type, msg) {
YAHOO.stealth.ErrHndlr(err.responseText);
}
});
} catch (err) {
if (err && err !== "") {
YAHOO.stealth.ErrHndlr(err.responseText);
}
BlockAjax = false; //if it was set, we should unset it
}
},
действия регулятора:
public ActionResult metricsrefresh(int gid)
{
UIGrid oGrid = this.metricRulesGrid(gid);
string myString = RenderViewToString(this.ControllerContext , MVCConstants.VIEW_LISTABLE, this.metricRulesGrid(gid));
return this.Json(new
{
myString
});
}
public ActionResult saveMetricRule(Rule rule)
{
bool IsNew = rule.RuleId == 0;
using (NewAngieDataContext oAngieCtxt = new NewAngieDataContext(new CSConfigurationMgr().GetConnectionString(ConnectionStringKey.Angie)))
{
if (IsNew)
oAngieCtxt.Rules.InsertOnSubmit(rule);
else
{
RuleCondition oRuleCon = null;
foreach (RuleCondition childItem in rule.RuleConditions)
{
oRuleCon =
oAngieCtxt.RuleConditions
.Where(CON => CON.RuleConditionId == childItem.RuleConditionId)
.FirstOrDefault();
oRuleCon.Points = childItem.Points;
oRuleCon.ConditionValue = childItem.ConditionValue;
oRuleCon.ToOperatorId = childItem.ToOperatorId;
oRuleCon.Sort = childItem.Sort;
}
oAngieCtxt.Rules.Attach(rule);
oAngieCtxt.Refresh(RefreshMode.KeepCurrentValues, rule);
}
oAngieCtxt.SubmitChanges();
}
return this.Json(new
{
msg = "Successful save.",
ruleId = rule.RuleId
});
}
Это фактически работает на развернутом сайте. но не работает в localhost, может быть, потому что символы post action не загружаются в режиме отладки, любой взгляд на это? – mmssaann
Слишком много кода. Не могли бы вы создать меньшую выборку? – mswietlicki