尝试使用Ext.NET从ajax请求加载选项卡的异常

时间:2014-05-21 03:18:46

标签: ext.net

我正在使用带有ext.net的asp.net mvc而我正在尝试创建一组仅在用户选择信息时加载信息的选项卡。

我可以使用ContentFromAction函数将部分视图加载到选项卡/面板中:

Tab loading as a partial view

但是,我无法弄清楚如何在选择标签时填充标签/面板。

我已根据Ext.NET MVC Examples Explorer version 2.5代码库创建了我的项目,此代码位于TabPanel > Basic > Ajax Load示例here

我尽可能地减少了这个例子来重现问题:

在我看来,我创建了选项卡并配置了加载程序(与示例项目完全相同):

Index.cshtml

    X.Panel()
        .ID("Tab3")
        .Title("Ajax Tab")
        .BodyPadding(6)
        .AutoScroll(true)
        .Loader(X.ComponentLoader()
            .Url(Url.Action("Ajax"))
            .LoadMask(m => m.ShowMask = true)
            .Params(new Parameter("containerId", "Tab3"))
            .Mode(LoadMode.Html)
        )

它正确调用我的控制器(与示例项目完全相同):

Axax_LoadController.cs

using System.Web.Mvc;    
namespace Ext.Net.MVC.Examples.Areas.TabPanel_Basic.Controllers
{
    public class Ajax_LoadController : Controller
    {
        public ActionResult Ajax(string containerId)
        {
            return View("Ajax");
        }
    }
}

在点击后,选项卡会在标签中显示相应的视图:

Ajax.cshtml (这可行)

@using Ext.Net.MVC
<div>
    <p>I am content loaded via Ajax when the tab is selected</p>
</div>

如果我尝试在视图中添加控件,问题就会出现,如下所示:

Ajax.cshtml

@using Ext.Net.MVC
@{ var X = Html.X(); }
<div>
    <p>I am content loaded via Ajax when the tab is selected</p>
    @X.TextField().Text("I am a text field")
</div>

此失败,例外情况:
ItemTag validation (_tkn_1): Reference token (init_script) was not found.

如果我修改文件Ext调用以返回Html,如下所示:

Ajax.cshtml

@using Ext.Net.MVC
@{ var X = Html.X(); }
<div>
    <p>I am content loaded via Ajax when the tab is selected</p>
    @X.TextField().Text("I am a text field").ToHtmlString()
</div>

它在我选择的标签中正确呈现以下文字:

It seems to return correctly if I use .ToHtmlString()

I am content loaded via Ajax when the tab is selected <#:item ref="init_script" index="0">Ext.create("Ext.form.field.Text",{renderTo:"App.id534c5fe0f159f3fb_Container",value:"I am a text field"});</#:item><div id="App.id534c5fe0f159f3fb_Container"></div>

我相信ext.net代码是由@ geoffrey.mcgill编写的堆栈溢出代码所以我希望他能帮助我解救。

1 个答案:

答案 0 :(得分:1)

您需要使用PartialViewResult。请看这些例子。

Partial Content

Partial Items

就个人而言,我建议遵循部分项目示例。您始终可以将任何nonExt.NET内容包装在Ext.NET容器中。这种方法的好处是,如果重新加载内容,则无需担心销毁Ext.NET组件。但是,无论如何,我建议在局部视图中为Ext.NET组件设置显式ID。至少,对于顶级组件。