I need to make some form using Razor and Devexpress controls. When user opens Devexpress popup control there appear a form with fields he needs to enter. Here is my view:
@model Models.Request
@Html.DevExpress().PopupControl(
settings =>
{
settings.Name = "newRequest";
settings.CallbackRouteValues = new { Controller = "Request", Action = "RequestForm" };
settings.EnableClientSideAPI = true;
settings.Width = 450;
settings.ShowHeader = true;
settings.ShowShadow = true;
settings.PopupAnimationType = AnimationType.Fade;
settings.AllowDragging = true;
settings.Modal = true;
settings.SetContent( () =>
{
using ( Html.BeginForm( ))
{
ViewContext.Writer.Write( "<div id = 'products'>" );
foreach(var product in Model.Products)
{
Html.RenderPartial( "ProductPartial", product );
}
ViewContext.Writer.Write( "</div>" );
//Total days field
@Html.DevExpress().SpinEdit(
cSettings =>
{
cSettings.Name = "numberOfProducts";
cSettings.Properties.EnableClientSideAPI = true;
cSettings.Width = 125;
cSettings.Properties.MinValue = 0;
cSettings.Properties.MaxValue = 100;
cSettings.ControlStyle.BackColor = System.Drawing.Color.FromArgb( 82, 82, 82 );
cSettings.ControlStyle.ForeColor = System.Drawing.Color.White;
} ).Bind( Model.NumberOfProducts ).GetHtml();
//POST BACK
@Html.DevExpress().Button( saveSett =>
{
saveSett.Name = "Save";
saveSett.Text = "Save";
saveSett.Width = 40;
saveSett.Height = 25;
saveSett.ControlStyle.CssClass = "button";
saveSett.Styles.EnableDefaultAppearance = false;
saveSett.EnableClientSideAPI = true;
saveSett.UseSubmitBehavior = true;
//saveSett.ClientSideEvents.Click = "function(s, e) { if(CheckValidation(s, e)) {} }";
} ).GetHtml();
}
} );
} ).GetHtml();
I expected that when my view is being rendered that it will call http get method, but it is not the case, it is always calling post method (if there are get post with same names) defined with this:
settings.CallbackRouteValues = new { Controller = "Request", Action = "RequestForm" };
Why is that so? And if I change post method name (that will be called on submit) it gives me an error, saying that there is no method to be called.
Further more, I have button that I wanted to use for submitting form: settings.CallbackRouteValues = new { Controller = "Request", Action = "RequestForm" }; But it does not even come into any action method in controller. Why is that so?
Here are my action methods:
public ActionResult RequestForm()
{
//...
}
[HttpPost]
public ActionResult RequestForm([ModelBinder(typeof(DevExpressEditorsBinder))] Request request)
{
//...
}
How to post back my model? What is the best way to do that? Obviously it is not working with these Devexpress controls in normal way. Can I somehow post back this model with jquery? What is the best way? Please advise.