PDA

View Full Version : عدم ارسال پارامترها به Controller در کار با popup های Custom در Grid DevExpress



mehdin69
چهارشنبه 17 اردیبهشت 1393, 13:58 عصر
سلام من توی گرید Devexpress خواستم کاربر وقتی ویرایش یا جدید رو میزنه یه صفحه براش باز شه بصورت Popup و تغییرات توی اون انجام بشه به شکل زیر
118750
خب تا اینجای کار بصورت زیر عمل کردم
یه partial view برای گرید اصلی
به شکل زیر


@using System.Web.UI.WebControls
@{
var grid = Html.DevExpress().GridView(settings =>
{
settings.Name = "GridView";
settings.CallbackRouteValues = new { Controller = "Home", Action = "GridViewPartial" };


settings.KeyboardSupport = true;
settings.AccessKey = "G";

settings.KeyFieldName = "ProductID";

settings.SettingsPager.Visible = true;
settings.Settings.ShowGroupPanel = true;

settings.SettingsBehavior.AllowSelectByRowClick = true;
settings.Settings.ShowFilterBar = GridViewStatusBarMode.Visible;

settings.Width = Unit.Percentage(100);
settings.Height = Unit.Pixel(100);

settings.CommandColumn.Visible = true;
settings.CommandColumn.ShowSelectCheckbox = true;
settings.CommandColumn.Width = Unit.Pixel(125);

//settings.Settings.HorizontalScrollBarMode = ScrollBarMode.Visible;
settings.Settings.VerticalScrollBarMode = ScrollBarMode.Visible;
settings.Settings.VerticalScrollableHeight = 500;

settings.Settings.ShowFilterRow = true;
settings.Settings.ShowFilterRowMenu = true;
settings.Settings.ShowHeaderFilterButton = true;

settings.Settings.EnableFilterControlPopupMenuScro lling = true;
settings.Settings.ShowFilterBar = GridViewStatusBarMode.Visible;
settings.Settings.ShowFilterRowMenuLikeItem = true;
settings.Settings.ShowHeaderFilterBlankItems = true;


settings.CommandColumn.ShowClearFilterButton = true;

settings.SettingsPager.Position = PagerPosition.Top;
settings.SettingsPager.FirstPageButton.Visible = true;
settings.SettingsPager.LastPageButton.Visible = true;
settings.SettingsPager.PageSizeItemSettings.Visibl e = true;
settings.SettingsPager.PageSizeItemSettings.Items = new string[] { "20", "50", "100" };
settings.SettingsPager.PageSize = 20;
settings.SettingsBehavior.ColumnResizeMode = ColumnResizeMode.Control;

settings.CustomActionRouteValues = new { Controller = "Editing", Action = "ChangeEditModePartial" };
settings.SettingsEditing.AddNewRowRouteValues = new { Controller = "Home", Action = "AddModesAddNewPartial" };
settings.SettingsEditing.UpdateRowRouteValues = new { Controller = "Home", Action = "EditModesUpdatePartial" };
settings.SettingsEditing.DeleteRowRouteValues = new { Controller = "Home", Action = "DeleteModesDeletePartial" };
settings.CommandColumn.ShowNewButton = true;

settings.CommandColumn.ShowDeleteButton = true;
settings.CommandColumn.ShowEditButton = true;
settings.SettingsEditing.Mode = GridViewEditingMode.PopupEditForm;
settings.SettingsText.PopupEditFormCaption = " ";
settings.SettingsPopup.EditForm.HorizontalAlign = PopupHorizontalAlign.WindowCenter;
settings.SettingsPopup.EditForm.VerticalAlign = PopupVerticalAlign.Middle;


settings.SetEditFormTemplateContent(content =>
{
Html.RenderPartial("Test",content);

});
settings.BeforeGetCallbackResult = (sender, e) =>
{
if (ViewData["KeepOpened"] != null)
{
bool keepOpened = Convert.ToBoolean(ViewData["KeepOpened"]);
if (keepOpened)
{
MVCxGridView grid1 = (MVCxGridView)sender;
object keyValue = ViewData["EditingRowKey"];
int visibleIndex = grid1.FindVisibleIndexByKeyValue(keyValue);
grid1.StartEdit(visibleIndex);
}
}
};

settings.Columns.Add("ProductName").SortAscending();
settings.Columns.Add("QuantityPerUnit");
settings.Columns.Add("UnitPrice");
settings.Columns.Add("UnitsInStock");
settings.Columns.Add("UnitsOnOrder");
settings.Columns.Add("ReorderLevel");
settings.Columns.Add("Discontinued");
settings.Columns.Add(column =>
{

column.FieldName = "CategoryName";
column.Caption = "Category Name";

});
settings.Columns.Add("City");
});

}
@grid.Bind(Model).GetHtml()




یه partialview برای popup که اسمش test هست و توی دستورات بالا با این دستور صداش زدم



settings.SetEditFormTemplateContent(content =>
{
Html.RenderPartial("Test",content);

});


که کد این partialview بصورت زیر است




@using (Ajax.BeginForm("Save", "Home", null, new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "myform" }, new { enctype = "multipart/form-data" }))
{
ViewContext.Writer.Write("<div class=\"row bg-primary\" >");
ViewContext.Writer.Write("<div class=\"row \"style=\"padding:5px;padding-top:10px;margin-top:10px;\">");

ViewContext.Writer.Write(" <div class=\"col-lg-2\" >");
Html.DevExpress().Label(
edtSettings =>
{
edtSettings.ControlStyle.CssClass = "label";
edtSettings.Text = "ProductName:";
edtSettings.AssociatedControlName = "ProductName";
}).Render();
ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("<div class=\"col-lg-3 \" >");
Html.DevExpress().TextBox(
edtSettings =>
{
edtSettings.Name = "TextBox_ProductName";
edtSettings.ControlStyle.CssClass = "editor";
edtSettings.Width = System.Web.UI.WebControls.Unit.Percentage(100);
}).Bind(DataBinder.Eval(Model.DataItem, "ProductName")).Render();
ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("<div class=\"col-lg-2\">");
Html.DevExpress().Label(
edtSettings =>
{
edtSettings.ControlStyle.CssClass = "label";
edtSettings.Text = "QuantityPerUnit:";
edtSettings.AssociatedControlName = "QuantityPerUnit";
}).Render();
ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("<div class=\"col-lg-3\">");
Html.DevExpress().TextBox(
edtSettings =>
{
edtSettings.Name = "TextBox_QuantityPerUnit";
edtSettings.ControlStyle.CssClass = "editor";
edtSettings.Width = System.Web.UI.WebControls.Unit.Percentage(100);
}).Bind(DataBinder.Eval(Model.DataItem, "QuantityPerUnit")).Render();
ViewContext.Writer.Write("</div>");
ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("<div class=\"row \"style=\"padding:5px;padding-top:5px;\">");
ViewContext.Writer.Write("<div class=\"col-lg-2\">");
Html.DevExpress().Label(
edtSettings =>
{
edtSettings.ControlStyle.CssClass = "label";
edtSettings.Text = "UnitPrice:";
edtSettings.AssociatedControlName = "UnitPrice";
}).Render();
ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("<div class=\"col-lg-3\">");
Html.DevExpress().TextBox(
edtSettings =>
{
edtSettings.Name = "TextBox_UnitPrice";
edtSettings.ControlStyle.CssClass = "editor";
edtSettings.Width = System.Web.UI.WebControls.Unit.Percentage(100);
}).Bind(DataBinder.Eval(Model.DataItem, "UnitPrice")).Render();
ViewContext.Writer.Write("</div>");



ViewContext.Writer.Write("<div class=\"col-lg-2 \">");
Html.DevExpress().Label(
edtSettings =>
{
edtSettings.ControlStyle.CssClass = "label";
edtSettings.Text = "UnitsOnOrder:";
edtSettings.AssociatedControlName = "UnitsOnOrder";
}).Render();
ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("<div class=\"col-lg-3\">");
Html.DevExpress().TextBox(
edtSettings =>
{
edtSettings.Name = "TextBox_UnitsOnOrder";
edtSettings.ControlStyle.CssClass = "editor";
edtSettings.Width = System.Web.UI.WebControls.Unit.Percentage(100);
}).Bind(DataBinder.Eval(Model.DataItem, "UnitsOnOrder")).Render();
ViewContext.Writer.Write("</div>");
ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("<div class=\"row \"style=\"padding:5px;padding-top:5px;\">");
ViewContext.Writer.Write("<div class=\"col-lg-2\">");
Html.DevExpress().Label(
edtSettings =>
{
edtSettings.ControlStyle.CssClass = "label";
edtSettings.Text = "ReorderLevel:";
edtSettings.AssociatedControlName = "ReorderLevel";
}).Render();
ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("<div class=\"col-lg-3\">");
Html.DevExpress().TextBox(
edtSettings =>
{
edtSettings.Name = "TextBox_ReorderLevel";
edtSettings.ControlStyle.CssClass = "editor";
edtSettings.Width = System.Web.UI.WebControls.Unit.Percentage(100);
}).Bind(DataBinder.Eval(Model.DataItem, "ReorderLevel")).Render();
ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("<div class=\"col-lg-2\">");
Html.DevExpress().Label(
edtSettings =>
{
edtSettings.ControlStyle.CssClass = "label";
edtSettings.Text = "Discontinued:";
edtSettings.AssociatedControlName = "Discontinued";
}).Render();
ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("<div class=\"col-lg-3\">");
Html.DevExpress().TextBox(
edtSettings =>
{
edtSettings.Name = "TextBox_Discontinued";
edtSettings.ControlStyle.CssClass = "editor";
edtSettings.Width = System.Web.UI.WebControls.Unit.Percentage(100);
}).Bind(DataBinder.Eval(Model.DataItem, "Discontinued")).Render();
ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("<div class=\"row \"style=\"padding:5px;padding-top:5px;\">");
ViewContext.Writer.Write("<div class=\"col-lg-2\">");

ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("<div class=\"col-lg-3\">");


@Html.Partial("ComboCategory")


ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("<div class=\"col-lg-2\">");
Html.DevExpress().Label(
edtSettings =>
{
edtSettings.ControlStyle.CssClass = "label";
edtSettings.Text = "City:";
edtSettings.AssociatedControlName = "City";
}).Render();
ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("<div class=\"col-lg-3\">");
Html.DevExpress().TextBox(
edtSettings =>
{
edtSettings.Name = "TextBox_City";
edtSettings.ControlStyle.CssClass = "editor";
edtSettings.Width = System.Web.UI.WebControls.Unit.Percentage(100);
}).Bind(DataBinder.Eval(Model.DataItem, "City")).Render();
ViewContext.Writer.Write("</div>");
ViewContext.Writer.Write("</div>");


ViewContext.Writer.Write("<div class=\"row \">");
ViewContext.Writer.Write("</div>");
ViewContext.Writer.Write("<div class=\"row \"style=\"padding:5px;padding-top:5px;\">");
ViewContext.Writer.Write("<div class=\"col-lg-1\" style=\"padding-left:10;padding-bottom:10px;margin-left:25px\">");
//Html.DevExpress().Button(btnsetting ]=>
//{
// btnsetting.Name = "btnUpdate";
// btnsetting.ControlStyle.CssClass = "btn-defualt";
// btnsetting.Text = "Update";
// btnsetting.Width = 100;

// btnsetting.ClientSideEvents.Click = "function(s, e){gvObject.UpdateEdit();}";
//}).Render();
@Html.Partial("SaveButton")

ViewContext.Writer.Write("</div>");

ViewContext.Writer.Write("</div>");
ViewContext.Writer.Write("</div>");
}



و partial ای ساختم برای دکمه Save روی این popup که بصورت زیر هست


<input type="button" value="Create" onclick="location.href='@Url.Action("Save", "Home")'" />


خب تا اینجا همه چیز خوب کار میکنه اما وقتی دکمه save رو میزنم چیزی به Controller ارسال نمیشه
و null ارسال میشه
تصویر زیر:
118751
مشکل کجاست ؟؟؟؟
چکار کنم مشکل حل شه؟
ممنون

mehdin69
پنج شنبه 18 اردیبهشت 1393, 18:55 عصر
کسی نمیتونه کمکم کنه؟

kavayo
سه شنبه 23 اردیبهشت 1393, 10:06 صبح
من با Grid devexpres کار نکردم اما در kendo grid بایستی فیلد کلید رو در گرید تعریف کنی .و یا از bind در پارامتر اکشن استفاده کن و اگه نشد از formcollection استفاده کن