Обработчик OnSelectionChanged календаря ASP.NET не вызывается - PullRequest
1 голос
/ 16 марта 2011

Может кто-нибудь сказать мне, почему обработчик событий с именем "MyCalendar_SelectionChanged" не выполняется, когда я щелкаю на дне в элементе управления календарем?Это простой код aspx из примера приложения ASP.NET MVC2:

<%@ 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 голосов
/ 16 марта 2011

<asp:Calendar runat="server" ... /> - это серверный элемент управления, основанный на ViewState и PostBack, которые больше не существуют в ASP.NET MVC, поэтому не следует использовать какие-либо серверные элементы управления.Поскольку нет обратных вызовов и обратных вызовов просмотра, ваша функция не будет запущена.Также убедитесь, что вы удалили тег runat="server" из своей формы и использовали HTML-помощники для создания форм.

Для реализации календаря в ASP.NET MVC вы можете воспользоваться jQuery UI datepicker .

Итак, вот как вы могли бы действовать:

Как всегда, вы начинаете с M (odel) в MVC, который будет представлять информацию, которую вы хотите показать (в вашем случае дату):

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

Затем вы попадаете в C (контроллер) в MVC:

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);
    }
}

Затем V (iew) в MVC:

<%@ 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 на свою страницу:

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

и если вы хотите, чтобы форма автоматически отправлялась, когда пользователь выбирает значение:

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

Хорошее место, чтобы начать с MVC здесь: http://asp.net/mvc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...