0

私は ASP.NE MVC4 に取り組んでおり、開発には LungoJS ライブラリを使用しています。

必要な方法で 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));   
    }

変数のアクションから htmlstring を取得している場合、Select 入力 html のみを返した後、ページ全体に影響する理由がわかりませんChildActionExtensions.Action(html, action, controller)...必要...)

4

1 に答える 1

0

ここでは子アクション (ヘルパー) を使用しないでくださいChildActionExtensions.Action。これは、応答に直接書き込むためです。代わりにできることは、必要なコレクションを含むビューモデルにプロパティを含め、それを引数としてヘルパーに直接渡すことです。別の方法として (ただし、これは適切な解決策ではありません)、ヘルパーで DAL を呼び出してリストを取得することもできます。

于 2013-08-05T11:57:19.903 に答える