ASP.NET日历OnSelectionChanged处理程序未被调用

时间:2011-03-16 18:18:13

标签: asp.net-mvc-2

有些人可以告诉我为什么当我点击日历控件中的某一天时,名为“MyCalendar_SelectionChanged”的事件处理程序没有被执行?这是ASP.NET MVC2应用程序示例中的简单aspx代码:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<script runat="server">
private void MyCalendar_SelectionChanged (object sender, System.EventArgs e) 
{
    //lbl1.Text = Calendar1.SelectedDate.ToString();
    Console.WriteLine("test");
} 
</script>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
  <form id="Form1" runat="server">
<h2><%= Html.Encode(ViewData["Message"]) %></h2>
    <p>
        To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
    </p>

    <div>
    <asp:Calendar ID="Calendar1" runat="server" OnSelectionChanged="MyCalendar_SelectionChanged" />     

    </div>    
</form>    
</asp:Content>

1 个答案:

答案 0 :(得分:0)

<asp:Calendar runat="server" ... />是依赖于ViewState和PostBack的服务器控件,这些概念在ASP.NET MVC中不再存在,因此您不应该使用任何服务器控件。由于没有回发和视图回调,因此不会触发您的函数。另外,请确保从表单中删除runat="server"标记,并使用HTML帮助程序生成表单。

要在ASP.NET MVC中实现日历,您可以签出jQuery UI datepicker

所以这是你可以继续的方式:

与往常一样,你从MVC中的M(odel)开始,它代表你愿意展示的信息(在你的情况下是一个日期):

public class MyViewModel
{
    public DateTime Date { get; set; }
}

然后你到了MVC中的C(ontroller):

public class HomeController: Controller
{
    // used to render the view
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            Date = DateTime.Now
        };
        return View(model);
    }

    // will be called when the form is submitted
    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }
}

然后是MVC中的V(iew):

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<AppName.Models.MyViewModel>" 
%>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <% using (Html.BeginForm()) { %>
        <%= Html.EditorFor(x => x.Date) %>
        <input type="submit" value="OK" />
    <% } %>
</asp:Content>

然后你可以有一个单独的javascript文件,在你的页面包含jquery和jquery UI脚本之后你可以附加datepicker:

$(function() {
    $('#Date').datepicker();
});

如果您希望表单在用户选择值时自动提交:

$(function() {
    $('#Date').datepicker({
        onSelect: function(dateText, inst) { 
            $('form').trigger('submit');
        }
    });
});

开始使用MVC的好地方是:http://asp.net/mvc