0

少し調べてみましたが、これに対する適切な解決策が見つかりませんでした。

私がやろうとしているのは、そのようなページに HTML.Action を持つことです

Html.Action("Calendar", "GlobalShared")

アクション「Calendar」内で、従来のカレンダー コントロールの html の結果を返す必要があります。

public ActionResult Calendar(
                  String ID,
                   String CssClass,
                   int CellSpacing,
                   int CellPadding,
                   String BorderWidth,
                   String ShowGridLines,
                   String ShowTitle,
                   String DayNameFormat
            )
        {
            System.Web.UI.WebControls.Calendar cal = new System.Web.UI.WebControls.Calendar();
            cal.ID = "MyCalendar";
            cal.CssClass = "month-view";
            cal.CellSpacing = 0;
            cal.CellPadding = -1;
            cal.BorderWidth = 0;
            cal.ShowGridLines = false;
            cal.ShowTitle = false;
            cal.DayNameFormat = System.Web.UI.WebControls.DayNameFormat.Full;

        }

これどうやってするの?ところで、私は HTML.Action を使用しています。これは、それが html 文字列を返すことを読んだためです。それは正しいですか、それとも他の方法を実行する必要がありますか?

ありがとう

編集。コントローラーでこれを試みる前に、ビュー .cshtml で次のコードを試してみましたが、動作しますが、コードをコントローラーに移動することを好みます

  @{
                    System.Web.UI.WebControls.Calendar cal = new System.Web.UI.WebControls.Calendar();
                    cal.ID = "MyCalendar";
                    cal.CssClass = "month-view";
                    cal.CellSpacing = 0;
                    cal.CellPadding = -1;
                    cal.BorderWidth = 0;
                    cal.ShowGridLines = false;
                    cal.ShowTitle = false;
                    cal.DayNameFormat = System.Web.UI.WebControls.DayNameFormat.Full;
                    cal.RenderControl(new HtmlTextWriter(Html.ViewContext.Writer)); 
                }

#2 を編集します。コントローラーでそれを使用したい理由は、将来、「DayRender」というイベントを接続したい場合、コントローラーでそれを行うことができるからです。ビューページを汚染することなく、ビューで同じことを行うことはできません。

4

2 に答える 2

1

わかった。みんなありがとう。わかった。基本的に、@{Html.RenderAction(..)} を使用し、アクション自体で StringBuilder/StringWriter を使用してから Content(...) を返す必要があります。以下のコード

ビューで

 @{Html.RenderAction("Calendar", "GlobalShared");}

コントローラー内

[ChildActionOnly]
        public ActionResult Calendar(
            )
        {

            System.Web.UI.WebControls.Calendar cal = new System.Web.UI.WebControls.Calendar();
            cal.ID = "MyCalendar";
            cal.CssClass = "month-view";
            cal.CellSpacing = 0;
            cal.CellPadding = -1;
            cal.BorderWidth = 0;
            cal.ShowGridLines = false;
            cal.ShowTitle = false;
            cal.DayNameFormat = System.Web.UI.WebControls.DayNameFormat.Full;
            cal.DayRender += new System.Web.UI.WebControls.DayRenderEventHandler(CalendarDayRender);
            StringBuilder sb = new StringBuilder();
            using (System.IO.StringWriter sw = new System.IO.StringWriter(sb))
            {

                System.Web.UI.HtmlTextWriter writer = new System.Web.UI.HtmlTextWriter(sw);
                cal.RenderControl(writer);
            }
            String calHTML = sb.ToString();
            return Content(calHTML);
        }

        private void CalendarDayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
        {

            e.Cell.Text = "";
            if (e.Day.Date == System.DateTime.Today)
            {
                e.Cell.CssClass = "today";
                System.Web.UI.HtmlControls.HtmlGenericControl h3 = new System.Web.UI.HtmlControls.HtmlGenericControl("h3");
                h3.InnerHtml = HttpContext.GetGlobalResourceObject("JTG_DateTime", "JTK_Today") + " " + e.Day.DayNumberText;
                e.Cell.Controls.Add(h3);
            }

        }
于 2013-06-18T16:56:55.323 に答える