0

我正在研究 ASP.NE MVC4,并且正在使用 LungoJS 库进行开发。

我正在开发一个 Helper 以我需要的方式呈现 LungoJS 控件。

对于 Select 输入,我想获得一个 JSON,其中包含每个选项的数据。

我可以从现有控制器的操作中获取所需的 JSON。

但是当我从助手调用操作时,视图会在<pre>标签内呈现我的 html :-(

看法

    <div class="form" id="address-data">

        @Html.LungoInputFor(m => m.CaseServiceCaseModel.CaseAddressModel.AddressDataModel.TerritoryId, "text", @Labels.Territory, @htmlAttributesRO, true)
        @Html.LungoSelectFor(m => m.CaseServiceCaseModel.CaseAddressModel.AddressDataModel.TerritoryId, @Labels.Territory, null, true, "GetTerritoryKendo", "Address")

帮手

    public static MvcHtmlString LungoSelectFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string label = "", object htmlAttributes = null, bool fieldset = false, string action = "", string controller = "")
    {
        TagBuilder tag = new TagBuilder("select");
        JavaScriptSerializer js = new JavaScriptSerializer();

        MvcHtmlString data = ChildActionExtensions.Action(html, action, controller);
        object[] json = js.Deserialize<object[]>(data.ToString());

        foreach (Dictionary<string,object> item in json)
        {
            foreach (var property in item)
            {
                TagBuilder option = new TagBuilder("option");
                switch (property.Key)
                {
                    case "Selected":
                        if ((bool)property.Value)
                        {
                            option.MergeAttribute("selected","selected");
                        }
                        break;
                    case "Text":
                        option.InnerHtml = property.Value.ToString();
                        break;
                    case "Value":
                        option.MergeAttribute("value", property.Value.ToString());
                        break;
                    default:
                        break;
                }
                tag.InnerHtml += option.ToString(TagRenderMode.Normal);
            }
        }

        return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));   
    }

我不明白为什么如果我从变量中的 Action 获取 htmlstring,并且在我只返回 Select 输入 html 之后,会影响整个页面......如果我评论ChildActionExtensions.Action(html, action, controller)视图呈现良好(但没有我的内容需要...)

4

1 回答 1

0

您不应该在此处使用子操作(ChildActionExtensions.Action助手),因为它们直接写入响应。您可以做的是在您的视图模型中包含一个属性,该属性将包含您需要的集合并将其作为参数直接传递给您的助手。或者(但这不是一个好的解决方案)是在帮助程序中调用您的 DAL 以检索列表。

于 2013-08-05T11:57:19.903 回答