كيندو، كيفية عمل ترحيل خادم الشبكة باستخدام مساعد mvc4

StackOverflow https://stackoverflow.com//questions/12714872

  •  13-12-2019
  •  | 
  •  

سؤال

أنا أستخدم mvc4.يوجد في إحدى صفحتي شبكة Kendo Grid.أريد أن أعرض 5 صفوف في كل صفحة.ليس لدي أي مشكلة في القيام بذلك باستخدام جافا سكريبت النقي، ومع ذلك، إذا كنت أستخدم مساعد mvc.لقد ضللت طريقي، ولم أتمكن من العثور على أي عينات على الإنترنت.

هذا هو رمز جافا سكريبت الخاص بي.

        <script language="javascript" type="text/javascript">

            $(document).ready(function () {
                $("#grid").kendoGrid({
                    dataSource: {
                        type: "json",
                        serverPaging: true,
                        pageSize: 5,
                        transport: { read: { url: "Products/GetAll", dataType: "json"} },
                        schema: { data: "Products", total: "TotalCount" }
                    },
                    height: 400,
                    pageable: true,
                    columns: [
                            { field: "ProductId", title: "ProductId" },
                            { field: "ProductType", title: "ProductType" },
                            { field: "Name", title: "Name" },
                            { field: "Created", title: "Created" }
                        ],
                    dataBound: function () {
                        this.expandRow(this.tbody.find("tr.k-master-row").first());
                    }
                });
            });

الآن إذا كنت أستخدم مساعد mvc

            @(Html.Kendo().Grid(Model)
                .Name("Grid")  //please help me to finish the rest

تحديث:

إضافة رمز الإجراء.

    [HttpPost]
    public ActionResult GetAll([DataSourceRequest]DataSourceRequest request, int id)
    {
        var products= ProductService.GetAll(id);

        return Json(products.ToDataSourceResult(request));
    }

طريقة GetAll في طبقة الخدمة:

    public IQueryable<Product> GetAll(int id)
    {
        var products= ProductRepository.Get(p => p.Id== id && p.IsActive == true, null, "ProductionYear")
                    .OrderBy(o => o.Name); //.ToList();

        return Product.Select(p => new ProductVM()
        {
            Name = p.Name,
            ProductionYear= p.ProductionYear.Year.ToString()
            Id = p.Id
        }).AsQueryable();
    }

الآن، إذا قمت بتشغيل التطبيق، فسوف أحصل على الخطأ التالي:

"لا يتعرف LINQ to Entities على الطريقة 'System.String ToString()'، ولا يمكن ترجمة هذه الطريقة إلى تعبير متجر."}

في طريقة GetAll، أقوم بالتعليق على "ToList()".إذا استخدمت ToList، كل شيء يعمل.لكنني سأقوم بالاستعلام عن جميع الصفوف بدلاً من تلك الصفوف التي أحتاجها لتلك الصفحة فقط.

هل كانت مفيدة؟

المحلول

يمكنك ضبط PageSize داخل طريقة مصدر البيانات.لذلك سوف تحتاج إلى شيء مثل:

@(Html.Kendo().Grid(Model)
     .Name("Grid") 
     .DataSource(dataSource => dataSource.Ajax()
                                    .PageSize(5)
                                    .Read(c => c.Action("GetAll", "Products")
                                    .Model(s => s.Id(m => m.Id)))
     .Columns(columns =>
     {
        columns.Bound(m => m.ProductId).Title("ProductId");
        //other colums
     })
    .Events(g => g.DataBound("somefunction"))
    .Pageable(true))

يمكنك العثور على مزيد من المعلومات على KendoUI Grid's وثائق أغلفة Asp.NET MVC.

نصائح أخرى

إذا كنت كذلك لا باستخدام أغلفة Kendo's ASP.NET MVC وتستخدم كائنات Kendo JavaScript مباشرة و إذا كنت تحاول إجراء ترحيل من جانب الخادم، فأنت بحاجة إلى إنشاء مصدر البيانات الخاص بك كما يلي:

var dataSource = {
    "type":"aspnetmvc-ajax",
    "serverSorting": true,
    "serverPaging": true,
    "page": 1,
    "pageSize": 8,
    "schema": {
      "data":"items",
      "total":"count",
      "errors":"errors"
    }
};

وستبدو طريقة التحكم في القراءة كما يلي:

    public ActionResult List_Read([DataSourceRequest]DataSourceRequest request) {
        try {
            var model = null /* prepare your model object here contain one page of grid data */;

            // using Json.NET here to serialize the model to string matching the
            // schema expected by the data source
            var content = JsonConvert.SerializeObject(new { count = model.Count, items = model.Items }, Formatting.None);

            return Content(content, "application/json");
        }
        catch (Exception exception) {
            // log exception if you need to

            var content = JsonConvert.SerializeObject(new { errors = exception.Message.ToString() }, Formatting.None);

            return Content(content, "application/json");
        }
    }

type, serverSorting و serverPaging من المهم التأكد من أن الترحيل والفرز يحدث من جانب الخادم. type يجب يكون aspnetmvc-ajax, وإلا فلن يتم التعرف على بيانات الاستعلام بواسطة رابط النموذج الذي تم تحديده بواسطة السمة [DataSourceRequest] في طريقة القراءة.لا يمكنك حذف هذه السمة إلا إذا كنت تريد كتابة رابط النموذج المخصص الخاص بك لتحليل بيانات الاستعلام المرسلة بواسطة مصدر بيانات kendo، والذي لا يتوافق مع اصطلاحات ربط النماذج المستخدمة بواسطة DefaultModelBinder في ASP.NET MVC.

الإجابة الأخرى ستعمل إذا كنت تستخدم Kendo Ui for ASP.NET MVC.إذا كنت لا تحتاج إلى تنفيذ الترحيل بنفسك.سترسل بيانات DataSource Kendo الصفحة والصفحة الحالية عند تقديم طلب.يمكنك استخدام ذلك للقيام بالترحيل.يرسل أيضا "خذ" و "تخطي" مما يجعل الأمور أسهل (تلميح LINQ).

الخطأ "لا يتعرف Linq على الكيانات على الطريقة" طريقة "System.String ()"، ولا يمكن ترجمة هذه الطريقة إلى تعبير المتجر. "} هو التفسير الذاتي، إلى جات حول هذا، يجب أن تفعل شيئا مثل

giveacodicetagpre.

باستخدام Asenumerable يجلب جميع السجلات من DB، ومن الأفضل استخدامها بعد أي تصفية

giveacodicetagpre.

بالأحرى المنتجات. في أي مكان (X=> X.Active= صحيح)

قم بتنزيل أمثلة Kendo، ثم Unzip ومتابعة <your directory>\Kendo UI ل ASP.NET MVC Q1 GuardacetagCode لمؤشر العرض و 2013\wrappers\aspnetmvc\Examples\Areas\razor\Views\web\grid\ ل ASP.NET MVC Q1 GuardacetagCode ل indexcontroller

في رأيك، قد ترغب أيضا في التحقق من ذلك أيضا. خطأ أثناء التسلسل أو التحيز باستخدام JSON JavascriptSerializer.يتجاوز طول السلسلة القيمة المضمنة في خاصية MaxJSonLength. إذا كان لديك بيانات كبيرة لجلب

giveacodicetagpre.

أيضا في وحدة تحكم في ActionResult Products_Read النظر في

giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top