2013-05-07 80 views
0

我的ASP.net MVC应用程序包含一个DevExpress DateEdit扩展,该Im能够选择日期(http://mvc.devexpress.com/Editors/DateEdit),现在我喜欢发送,每次用户通过在我的DateEdit扩展的处理程序上作出反应来将日期,日期更改回控制器。如何调用控制器与JavaScript函数在ClientSideEvents.DateChanged上反应

我设置ClientSideEvents.DateChanged的JavaScript函数,现在我的问题开始,我通常用形式发送数据和提交回控制器和粘合剂它们绑定到我的模型......

但现在我想在javascript函数中调用像writeDate(DateTime date)这样的控制器,ActionLink可能会这样做,因为我知道可以通过链接调用控制器,例如“\ myController \ Method \参数“,但我不知道如何实现,没有用户的行为。

我的代码:

@Html.DevExpress().DateEdit(settings => 
        { 
         settings.Name = "Date"; 
         settings.Properties.UseMaskBehavior = true; 
         settings.Properties.EditFormat = EditFormat.Custom; 
         settings.Properties.EditFormatString = "MMMM dd, yyyy"; 
         settings.Properties.DisplayFormatString = "MMMM dd, yyyy"; 
         settings.Date = DateTime.Now; 
         settings.Properties.ClientSideEvents.DateChanged = "OnDateChanged"; 
        }).GetHtml() 
       @Html.DevExpress().Button(settings => { 
        settings.Name = "sendDate"; 
        settings.ClientVisible = false; 
        settings.UseSubmitBehavior = true; 
       }); 

function OnDateChanged(s, e) { 
    // Call Controller 
} 

[HttpPost, ValidateInput(false)] 
    public ActionResult onDateChanged(DateTime date) 
    { 
     // Do something 
    } 

所以我觉得我的一般问题是,我该如何将数据传递给控制器​​没有一个形式,只在一个客户端事件的反应? :)

回答

0

如果DevExpress的可以调用一个js函数作为客户端事件的结果,那么你可以这样做:

function OnDateChanged(s, e) { 
    $.ajax({ 
     url: '@Url.Action("onDateChanged","Controller_Name")', 
     type: 'POST', 
     // e here depends on how devexpress pass the value 
     // e.Value? or e.val(), just replace it accordingly 
     data: { date: e } 
    }); 
} 
0

这样做的正确的方法,是用从的DevExpress的CallbackPanel扩展,将DateTime扩展添加到它的内容中,将面板的CallBackRouteValue设置为控制器,在DateTime-Extension的ClientSideEvent上作出反应并触发该服务器的回调。

查看

<script type="text/javascript">  
    var date = null; 
    function OnDateChanged(s, e) { 
     date = Datum.GetValue(); 
     if (!CBPDateEdit.InCallback()) { 
      CBPDateEdit.PerformCallback(); 
     } 
    } 

    function OnBeginCallback(s, e) { 
     e.customArgs["newDate"] = Date.GetValue().toString(); 
    } 
    </script> 
@Html.DevExpress().CallbackPanel(settings => 
{ 
settings.Name = "CBPDateEdit"; 
settings.CallbackRouteValues = new { Controller = "Controller", Action = "onDateChanged" }; 

settings.SetContent(() => 
{ 
    ViewContext.Writer.Write("content"); 
    Html.DevExpress().DateEdit(DateSettings => 
        { 
         DateSettings.Name = "Date"; 
         DateSettings.Properties.UseMaskBehavior = true; 
         DateSettings.Properties.EditFormat = EditFormat.Custom; 
         DateSettings.Properties.EditFormatString = "MMMM dd, yyyy"; 
         DateSettings.Properties.DisplayFormatString = "MMMM dd, yyyy"; 
         DateSettings.Properties.EnableClientSideAPI = true; 
         DateSettings.Date = DateTime.Now; 
         DateSettings.Properties.ClientSideEvents.DateChanged = "OnDateChanged"; 
        }).GetHtml(); 
}); 

settings.ClientSideEvents.BeginCallback = "OnBeginCallback"; 
}).GetHtml() 

控制器

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult onDateChanged(String newDate) 
    { 

     viewModel.date= DateTime.ParseExact(newDate, "ddd MMM d HH:mm:ss UTCzzzzz yyyy", CultureInfo.InvariantCulture); 

     return PartialView("_CBPDateEditPartial"); 
    } 
相关问题