سفارشی سازی عناصر صفحات پویای افزودن و ویرایش رکوردهای jqGrid در ASP.NET MVC
نویسنده: وحید نصیری
تاریخ: ۱۳۹۳/۰۴/۱۵ ۸:۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public class Product
{
public int Id { set; get; }
public DateTime AddDate { set; get; }
public string Name { set; get; }
public decimal Price { set; get; }
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - My ASP.NET Application</title>
<link href="~/Content/themes/base/jquery.ui.all.css" rel="stylesheet" />
<link href="~/Content/jquery.jqGrid/ui.jqgrid.css" rel="stylesheet" />
<link href="~/Content/PersianDatePicker.css" rel="stylesheet" />
<link href="~/Content/Site.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div>
@RenderBody()
</div>
<script src="~/Scripts/jquery-1.7.2.min.js"></script>
<script src="~/Scripts/jquery-ui-1.8.11.min.js"></script>
<script src="~/Scripts/i18n/grid.locale-fa.js"></script>
<script src="~/Scripts/jquery.jqGrid.min.js"></script>
<script src="~/Scripts/PersianDatePicker.js"></script>
<script src="~/Scripts/jquery.price_format.2.0.js"></script>
@RenderSection("Scripts", required: false)
</body>
</html> colModel: [
{
name: 'Name', index: 'Name', align: 'right', width: 100,
editable: true, edittype: 'text',
editoptions: {
maxlength: 40,
dataInit: function (elem) {
// http://jqueryui.com/autocomplete/
$(elem).autocomplete({
source: '@Url.Action("GetProductNames","Home")',
minLength: 2,
select: function (event, ui) {
$(elem).val(ui.item.value);
$(elem).trigger('change');
}
});
}
},
editrules: {
required: true
}
}
], public ActionResult GetProductNames(string term)
{
var list = ProductDataSource.LatestProducts
.Where(x => x.Name.StartsWith(term))
.Select(x => x.Name)
.Take(10)
.ToArray();
return Json(list, JsonRequestBehavior.AllowGet);
} colModel: [
{
name: 'AddDate', index: 'AddDate', align: 'center', width: 100,
editable: true, edittype: 'text',
editoptions: {
maxlength: 10,
// https://www.dntips.ir/post/1382
onclick: "PersianDatePicker.Show(this,'@today');"
},
editrules: {
required: true
}
}
], @{
ViewBag.Title = "Index";
var today = DateTime.Now.ToPersianDate();
} colModel: [
{
name: 'Price', index: 'Price', align: 'center', width: 100,
formatter: 'currency',
formatoptions:
{
decimalSeparator: '.',
thousandsSeparator: ',',
decimalPlaces: 2,
prefix: '$'
},
editable: true, edittype: 'text',
editoptions: {
dir: 'ltr',
dataInit: function (elem) {
// http://jquerypriceformat.com/
$(elem).priceFormat({
prefix: '',
thousandsSeparator: ',',
clearPrefix: true,
centsSeparator: '',
centsLimit: 0
});
}
},
editrules: {
required: true,
minValue: 0
}
}
], using System;
using System.Globalization;
using System.Threading;
using System.Web.Mvc;
namespace jqGrid05.CustomModelBinders
{
/// <summary>
/// How to register it in the Application_Start method of Global.asax.cs
/// ModelBinders.Binders.Add(typeof(decimal), new DecimalBinder());
/// </summary>
public class DecimalBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (bindingContext.ModelType == typeof(decimal) || bindingContext.ModelType == typeof(decimal?))
{
return bindDecimal(bindingContext);
}
return base.BindModel(controllerContext, bindingContext);
}
private static object bindDecimal(ModelBindingContext bindingContext)
{
var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (valueProviderResult == null)
return null;
bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueProviderResult);
decimal value;
var valueAsString = valueProviderResult.AttemptedValue == null ?
null : valueProviderResult.AttemptedValue.Trim();
if (string.IsNullOrEmpty(valueAsString))
return null;
if (!decimal.TryParse(valueAsString, NumberStyles.Any, Thread.CurrentThread.CurrentCulture, out value))
{
const string error ="عدد وارد شده معتبر نیست";
var ex = new InvalidOperationException(error, new Exception(error, new FormatException(error)));
bindingContext.ModelState.AddModelError(bindingContext.ModelName, ex);
return null;
}
return value;
}
}
} using System;
using System.Web.Mvc;
using System.Web.Routing;
using jqGrid05.CustomModelBinders;
namespace jqGrid05
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
ModelBinders.Binders.Add(typeof(DateTime), new PersianDateModelBinder());
ModelBinders.Binders.Add(typeof(decimal), new DecimalBinder());
}
}
} $.extend($.jgrid.edit, {
bSubmit: "Save and Close",
bCancel: "Cancel",
width: 370,
recreateForm: true,
beforeShowForm: function () {
$('<a href="#">Save and New<span class="ui-icon ui-icon-disk"></span></a>')
.click(function() {
alert("click!");
}).addClass("fm-button ui-state-default ui-corner-all fm-button-icon-left")
.prependTo("#Act_Buttons>td.EditButton");
}
}); colModel:[
{
name:'providerUserId',
index:'providerUserId',
width:100,
editable:true,
editrules:{
required:true,
edithidden:true
},
hidden:true,
editoptions:{
dataInit: function(element) {
$(element).attr("readonly", "readonly");
}
}
},
//...
] $("#list").trigger("reloadGrid");