2014-05-21 42 views
0

我正在使用asp.net mvc与ext.net,我试图创建一组选项卡,只有当用户选择它们时才加载信息。异常尝试使用Ext.NET从ajax请求加载选项卡

我可以管理使用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

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

Partial Content

Partial Items

就个人而言,我会建议遵循中部分条目的例子。您始终可以将任何非eExt.NET内容封装在Ext.NET容器中。这种方法的好处在于,如果重新加载内容,则不必担心会摧毁Ext.NET组件。不过,无论如何,我会建议在局部视图中为Ext.NET组件设置显式ID。至少,对于顶级组件。