مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

محمد ملکی

عضویت از 1394/03/02

مشکل عجیب با NumericTextbox کندو

  • یکشنبه 16 خرداد 1395
  • 12:55
تشکر میکنم

سلام من سر یه پروژه هستم دیگه هر چی مشکل بود سر راهم سبز شده

ببینید من یه کلاس دارم و یه ویو که با مقادیر پیش فرض پر میشه به صورت زیر

   [HttpGet]
        public ActionResult CompleteRegister(int id)
        {
            try
            {
                DefaultBuilding buildd = new DefaultBuilding();

                if(id>0)
                {
                    db = new dbCMSEntities();
                    var query = db.BuildingProperties.Where(c => c.BuildingProperties_id == id).FirstOrDefault();
                    db.Dispose();
                    if(query !=null )
                    {
                        buildd .id=query.BuildingProperties_id;
                        buildd .Name=query .BuildingProperties_Name;
                        buildd.Email = query.BuildingProperties_MangerEmail;
                        buildd.BuildingAccount = query.BuildingProperties_BuildingAccount;
                        buildd.BlockCount=1;
                        buildd.Cash =0;
                        buildd.DefaultCharge=0;
                        buildd.UnitCount =query.BuildingProperties_UnitCount ;
                        buildd.StartDate =DateTime.Now;
                        buildd.StartDateValid = DateTime.Now;
                        buildd.EndDateValid = DateTime.Now.AddDays(10);
                       
                        return View(buildd);
                    }
                    else
                    {
                        ViewBag.Error = "در نمایش اطلاعات ساختمان خطا رخ داده است";
                        return View();
                    }
                }
                else
                {
                    ViewBag.Error = "در نمایش اطلاعات ساختمان خطا رخ داده است";
                    return View();
                }

            }
            catch (Exception)
            {

                ViewBag.Error = "در نمایش اطلاعات ساختمان خطا رخ داده است";
                return View();
            }

        }

اینم خود ویو

@model CMScharge.Classes.DefaultBuilding
@{
    ViewBag.Title = "تکمیل ثبت نام";
    Layout = "~/Views/Shared/_MainLayout.cshtml";
}
@if (ViewBag.Error != null)
{
    <p class="Error-color">@ViewBag.Error</p>
}
<h4>به سیستم مدیریت ساختمان شارژ پرند خوش آمدید</h4>
<br />
<h4>لطفاً اطلاعات زیر را به دقت وارد نمایید بر اساس این اطلاعات تنظیمات پایه حساب ساختمان شما تنظیم می گردد</h4>
<hr />
@if (Model != null)
{
    using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)

        @Html.HiddenFor(c => c.id)
        @Html.HiddenFor(c => c.Email)
        @Html.HiddenFor(c => c.BuildingAccount)
        @Html.HiddenFor(c => c.EndDateValid)
        @Html.HiddenFor(c => c.StartDateValid)
        @Html.HiddenFor(c => c.UnitCount)
   

        <div class="form-horizontal">

            <div class="form-group">
                @Html.Label("lblid", "شناسه : ")
                @Html.DisplayFor(model => model.Email)
                @Html.Label("lblEmail", "با ایمیل : ")
                @Html.DisplayFor(model => model.BuildingAccount)
                <br />
                @Html.Label("lblBlockCount", "تعداد بلوک : ")
                @Html.DisplayFor(model => model.BlockCount)
            </div>
            <hr />
            <div class="form-group">
                @Html.Label("lblidd", "نام ساختمان : ", new { @class = "control-label col-md-2" })

                <div class="col-md-8">
                    @Html.Label("lblidd1", "عنوانی که در بالای تمام صفحات نمایش داده خواهد شد", new { @class = "control-label" })
                </div>
                <div class="col-md-2">
                    @Html.TextBoxFor(model => model.Name)
                    @Html.ValidationMessageFor(model => model.Name)
                </div>
            </div>

            <div class="form-group">
                @Html.Label("lblUnitCount", "تعداد واحد : ", new { @class = "control-label col-md-2" })

                <div class="col-md-8">
                    @Html.Label("lblUnitCount1", "تعداد کل واحدهایی که حساب و کتاب آن ها را مدیریت خواهید کرد", new { @class = "control-label" })
                </div>
                <div class="col-md-2">
                    @(Html.Kendo().NumericTextBoxFor(model => model.UnitCount)
                .Name("UnitCount")
                      .Spinners(false)
                      .Decimals(0)
                      .Format("#")
                    )

                    @Html.ValidationMessageFor(model => model.UnitCount)


                </div>
            </div>

            <div class="form-group">
                @Html.Label("lblCash", "موجودی صندوق ( ریال) : ", new { @class = "control-label col-md-2" })
                <div class="col-md-8">
                    @Html.Label("lblCash1", "موجودی نقدی صندوق در آغاز دوره ی مدیریت.این مبلغ در قسمت تنظیمات بعداً هم قابل اصلاح است", new { @class = "control-label" })
                </div>
                <div class="col-md-2">
                    @(Html.Kendo().NumericTextBoxFor(model => model.Cash)
       .Name("Cash")
            .Format("#,##")
            .Spinners(false)
                    )
                    @Html.ValidationMessageFor(model => model.Cash)
                </div>
            </div>

            <div class="form-group">
                @Html.Label("lblDefaultCharge", "پیش فرض شارژ ماهانه هر واحد (ریال) : ", new { @class = "control-label col-md-2" })
                <div class="col-md-8">
                    @Html.Label("lblDefaultCharge1", "مقدار شارژ ثابت که به صورت ماهانه از واحدها دریافت می گردد این مبلغ صرفاً یک پیش فرض است.بعداً در قسمت تنظیمات قابل تغییر است", new { @class = "control-label" })
                </div>
                <div class="col-md-2">
                    @(Html.Kendo().NumericTextBoxFor(model => model.DefaultCharge)
.Name("DefaultCharge")
            .Format("#,##")
            .Spinners(false)
                    )
                    @Html.ValidationMessageFor(model => model.DefaultCharge)
                </div>
            </div>

            <div class="form-group">
                @Html.Label("lblStartDate", "تاریخ شروع دوره : ", new { @class = "control-label col-md-2" })
                <div class="col-md-8">
                    @Html.Label("lblStartDate1", "تاریخ شروع فعالیت شما به عنوان مدیر ساختمان", new { @class = "control-label" })
                </div>
                <div class="col-md-2">
                    @(Html.Kendo().DatePickerFor(model => model.StartDate))
                    @Html.ValidationMessageFor(model => model.StartDate)
                </div>
            </div>

            <div class="form-group">
                <div class="col-md-10">
                    <input type="submit" value="تکمیل ثبت نام" class="btn btn-default" />
                </div>
            </div>
        </div>
     
    }
}
@section scripts{
    <script src="~/Scripts/kendoFa/JalaliDate.js"></script>
    <script src="~/Scripts/kendoFa/kendo.core.js"></script>
    <script src="~/Scripts/kendoFa/kendo.calendar.js"></script>
    <script src="~/Scripts/kendoFa/kendo.popup.js"></script>
    <script src="~/Scripts/kendoFa/kendo.datepicker.js"></script>
    <script src="~/Scripts/kendoFa/fa-IR.js"></script>


    <script>
        $(document).ready(function () {
            kendo.culture("fa-IR");
            $("#StartDate").kendoDatePicker();
            $("#UnitCount").NumericTextBox();
            $("#Name").on('click focusin', function () {
                this.value = '';
            });
        });
    </script>
}

یعنی وقتی وارد این ویو میشم به طور پیش فرض با یه مقادیری پر شده مثل زیر

نکته ظریف اینه وقتی توو post میرم اولا بیشتر null  برمیگردونه برای اینکه null برنگردونه مجبورم بریزم توو Hiddenfor

وقتی میریزم توو hidenfor مثل عکس بالا ببینید الکی برای خودش اون hiddenfor مربوط به تعداد واحد رو textbox میکنه

من از NumericTextBox مربوط به به kedo استفاده کردم ولی متاسفانه نه validation اش کار میکنه و این مشکل عجیبم داره که الکی برای Hiddenfor اش textbox درست میکنه و برای خود تعداد واحد  دیگه tetxbox معمولی میزنه

ببینید مشکل چیه واقعا کلافم کرده

اینم کد postam

    [HttpPost]
        public ActionResult CompleteRegister(DefaultBuilding buildd)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    if (buildd.UnitCount > 0)
                    {

                        blBuilding = new BuildingPropertiesRepositpry();
                        BuildingProperties build = blBuilding.select(buildd.id);
                        if (build != null)
                        {
                            int Building_Id = build.BuildingProperties_id;

                            build.BuildingProperties_Name = buildd.Name;
                            build.BuildingProperties_UnitCount = buildd.UnitCount;
                            build.BuildingProperties_DefaultCharge = buildd.DefaultCharge;
                            build.BuildingProperties_FreeAccount = true;
                            build.BuildingProperties_StartDate = buildd.StartDate;
                            build.BuildingProperties_ValidStartDate = buildd.StartDateValid;
                            build.BuildingProperties_ValidEndDate = buildd.EndDateValid;

                            if (blBuilding.update(build))
                            {
                                blCash = new CashRepository();
                                Cash c = new Cash();
                                c.Cash_Amount = buildd.Cash;

                                if (blCash.Add(c))
                                {

                                    Block defaultt = new Block();
                                    defaultt.Block_Name = "بلوک شماره یک";
                                    defaultt.Block_BuildingProperties_id = Building_Id;

                                    blBlock = new BlockRepository();

                                    if (blBlock.Add(defaultt))
                                    {
                                        blUnit = new UnitRepository();
                                        Unit u;
                                        for (int i = 0; i < buildd.UnitCount; i++)
                                        {
                                            u = new Unit();
                                            u.Unit_BlockId = defaultt.Block_id;
                                            blUnit.Add(u);
                                        }
                                        return RedirectToAction("BuildingDefault", new System.Web.Routing.RouteValueDictionary(new { controller = "Home", action = "BuildingDefault" }));

                                    }
                                    else
                                    {
                                        ViewBag.Error = "در ثبت بلوک های ساختمان خطا رخ داده است";
                                        return View();
                                    }
                                }
                                else
                                {
                                    ViewBag.Error = "در ثبت مقدار اولیه صندوق خطا رخ داده است";
                                    return View();
                                }


                            }
                            else
                            {
                                ViewBag.Error = "در ثبت مشخصات ساختمان خطا رخ داده است";
                                return View();
                            }


                        }
                        else
                        {
                            ViewBag.Error = "شناسه ساختمان ثبت شده معتبر نمی باشد";
                            return View();
                        }
                    }
                    else
                    {
                        ViewBag.Error = "تعداد واحد حداقل باید 1 باشد";
                        return View();
                    }
                }
                else
                {
                    ViewBag.Error = "مقادیر ورودی صحیح نمی باشد";
                    return View(buildd);
                }
            }
            catch (Exception)
            {
                ViewBag.Error = "در ثبت مشخصات پایه ساختمان خطا رخ داده است";
                return View(buildd);
            }


        }

بعد هر کاری هم میکنم اون تعداد واحدی که عوض شده موقع پاس دادن توو post صفر میشه

 

پاسخ های این پرسش

تعداد پاسخ ها : 2 پاسخ
کاربر سایت

علی شهریاری

عضویت از 1393/05/30

  • یکشنبه 16 خرداد 1395
  • 19:19

با سلام

دوست عزیز اگه درست کار میکرد عجیب بود شما چندین input  با یه نام دارید . برای مثال یکیش زیر نوشتم

@(Html.Kendo().NumericTextBoxFor(model => model.UnitCount)
                .Name("UnitCount")
                      .Spinners(false)
                      .Decimals(0)
                      .Format("#")
                    )
 

و

@Html.HiddenFor(c => c.UnitCount)

 

اوکی wink

کاربر سایت

محمد ملکی

عضویت از 1394/03/02

  • یکشنبه 16 خرداد 1395
  • 20:27

خب اگه توو hiden for  نزارم که null  میشه توو post

خب اگه اشکال داره چرا برای بقیه اینجوری نیست و درسته؟

راه حل بدید

ممنون

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)