【问题标题】:Ajax.BeginForm replace entire pageAjax.BeginForm 替换整个页面
【发布时间】:2015-07-10 13:06:12
【问题描述】:

我在网上阅读了许多类似的问题,但仍然无法弄清楚问题所在。我的Ajax.BeginFormController 中通过PartialView 返回一条消息,但字符串替换了整个页面。

View:

   @using (Ajax.BeginForm("NoMoreItem", "ProductListing", 
new AjaxOptions
{
HttpMethod = "get",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = string.Concat("NoMoreItemSection1-", counter)
}, new { @id = string.Concat("NoMoreItemForm1-", counter) }))
{
    <input type="hidden" value="@Model.Email" name="email" />
    <input type="hidden" value="@i.code" name="code" />
    <input type="submit" value="notify me" />
}
</div>

我的控制者:

public ActionResult NoMoreItem(string email, string productCode)
{
    string message;
    _waitinglist.Save(email, productCode);
    message = "Item added to Waiting List";
    return PartialView("ItemAdded", message);
}

ItemAdded查看:

@model string
<div>
    @Model
</div>

我在_Layout.cshtml 中引用了jquery.unobtrusive-ajax.js 文件,所以这似乎不是原因。

有人知道为什么这条消息会替换整个页面吗?

【问题讨论】:

  • 发生这种情况时,大部分时间是因为脚本加载不当。见这里stackoverflow.com/questions/23895918/…
  • 点击按钮之前呈现的 HTML 是什么样子的?
  • @Jasen 一个带有项目名称和按钮的表格。我在布局中包含了 js 文件,但我没有在 ItemAdded 视图中使用布局。也许这可能是原因?如果是这样,我应该在局部视图还是父视图中引用js文件?
  • ItemAdded 是部分的,应该使用布局加载到另一个视图中——这很好。检查调试控制台上是否有错误。检查你有 jquery.js 然后 jquery.unobtrusive-ajax.js 呈现的 html。确保您的 id 在页面上是唯一的。主视图上的目标 id NoMoreItemSection1-counter 在哪里?

标签: c# ajax asp.net-mvc razor


【解决方案1】:

确保您引用了 MS 文件

 <script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
    <script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>

我也认为您希望发布而不是获取。

【讨论】:

  • 但你仍然必须包含它们。
  • 不,它不起作用。奇怪的是,当我在页面完全加载之前单击按钮时,它可以工作。但是在页面完全加载后停止工作。太奇怪了。
【解决方案2】:

仔细检查您的 jquery.unobtrusive-ajax.js 是否正确加载到页面中,并检查输入标签中的产品代码名称(应该等于 action 参数)。

如果这能解决您的问题,请告诉我。

【讨论】:

  • bundles.Add(new ScriptBundle("~/bundles/js").Include("~/Scripts/jquery.unobtrusive-ajax.js"));
  • 不,它不起作用。奇怪的是,当我在页面完全加载之前单击按钮时,它可以工作。但是在页面完全加载后停止工作。太奇怪了。
【解决方案3】:

对于那些在谷歌上兜兜转转但找不到解决方案的人,

确保 web.configappsettings 中有 UnobtrusiveJavaScriptEnabled=true

【讨论】:

    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    相关资源
    最近更新 更多