دسته بندی ها
12:41 1399/12/02

عدم دریافت مقدار تگ Select از Model به Controller

مشخصات سوال کننده :
کاربر : sadati     امتیاز کاربر : 17     رتبه کاربر : 41
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 2984
2 نظر
fateme : در مدل Branchs فیلد BranchGrade چرا به صورت یک List تعریف شده ؟ اصلا شما چه نیازی به این فیلد دارید؟ اگر شما برای نمایش اطلاعات در کمبوباکس این فیلد رو تعریف کردید که اصلا نیازی نیست در Model بیاید یک فیلد تعریف کنید. نکته بعد اینکه اصلا چرا شما این فیلد رو Required کردید؟ خب شما توی فرمی که به سمت کنترلر ارسال می کنید که هیچ لیستی ارسال نمی کنید. پس چرا باید یک List اون هم به صورت Required وجود داشته باشه ؟

امتیاز کاربر : 1635   رتبه کاربر : 2   تاریخ ثبت : 12:51 1399/12/02
sadati : Required رو بر خواهم داشت . توجه به این نکته . هیچ تاثیری روی جواب نداشت . بهتره بهش معطوف نشید. BranchGrade بصورت فیلد انتخاب شده که از فهرست درجات یکی رو انتخاب کنیم و داینامیک باشه چون ممکنه بعدا نیاز به تغییرات باشه . ( در جواب اینکه به فلان فیلد چه نیازی هست ؟ خودتون جای من باشید چه جوابی به پرسشگر می دید ؟ ) من از نظر شما نتونستم جوابی که کارم رو راه بندازه حل کنم ممنون

امتیاز کاربر : 17   رتبه کاربر : 41   تاریخ ثبت : 01:56 1399/12/02
هوش مصنوعی

پاسخ هوش مصنوعی

به نظر می رسد مشکل از نحوه تعریف و استفاده از پراپرتی ها در مدل شما باشد. به طور خاص، مسیله به این دلیل است که پراپرتی BranchGrade به عنوان List<SelectListItem> تعریف شده و به همین دلیل مدل نمی تواند مقدار BranchGradeId را به درستی دریافت کند.

برای حل این مشکل، باید اطمینان حاصل کنید که پراپرتی BranchGrade از نوع List<SelectListItem> نباشد و تنها محتوای BranchGradeId را در نظر بگیرد. در عوض، BranchGrade باید در هنگام بارگیری مدل به کنترلر ارسال شود، به طوری که در هنگام ارسال فرم، مقدار BranchGradeId به طور صحیح به کنترلر منتقل شود.

در اینجا چند نکته را بررسی می کنیم:

  1. مطمین شوید که نام select شما در فرم واقعی به نام BranchGradeId متصل است و به شکل صحیحی از منبع داده (مدل) تغذیه می شود.
  2. تأکد نمایید که مقدار BranchGradeId در زمان بارگذاری مدل، به درستی در select پر شده باشد.
  3. به یاد داشته باشید که فراموش نشود که مقدار BranchGradeId در هنگام ارسال فرم وجود داشته و به شکل صحیحی به کنترلر فرستاده شود.

به عنوان مثال، مطمین شوید که در کد select شما از asp-for به درستی استفاده شده و asp-items نیز با لیست مناسبی که در کنترلر به آن داده اید به درستی کار می کند.

برای فرآیند ارسال به کنترلر، می توانید موارد زیر را ارایه کنید:


[HttpPost]
public IActionResult YourActionMethod(Branchs model)
{
    if (ModelState.IsValid)
    {
        // انجام عملیات لازم
    }
    return View(model);
}

این موارد باید به شما کمک کنند تا مشکل دریافت اطلاعات از تگ Select به کنترلر را حل کنید. اگر مشکل ادامه داشت، به جزییات دقیق تر و ورود به اطلاعات مربوط به خطاهای مدل و چگونگی اعمال فرم دقت کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : fateme 20:16 1399/12/02

به نظر بنده تغییرات زیر میتونه بهتون کمک کنه. اول اینکه شما برای نمایش اطلاعات در تگ Select یا همون کمبوباکس نیازی ندارید داخل Model یک پراپرتی به صورت List تعریف کنید. در واقع همون پراپرتی BranckGradeId کافیه.

 

public class Branchs
{
        public int Id { get; set; }

        [Display(Name = "کدشعبه/واحد")]
        [Required(ErrorMessage = "کدشعبه/واحد را وارد کنید")]
        public string BranchCode { get; set; }

        [Display(Name = "نام شعبه/واحد")]
        [Required(ErrorMessage = "نام شعبه/واحد را وارد کنید")]
        public string BranchName { get; set; }

        [Display(Name = " درجه شعبه")]
        public string BranchGradeId { get; set; }
}

خب حالا برای پر کردن تگ Select هم میتونید از طریق کنترلر و از طریق یک ViewBag این کار رو انجام بدید.

//In Controller

private void FillCombo()
{
    List<BranchGrade> ListGrade = _context.BranchGrade.ToList();
    BranchGrade GradeFirst = new BranchGrade
    {
        Id = "-1",
        Grade = "--- انتخاب شعبه----"
    };
    ListGrade .Insert(0, GradeFirst );
    ViewBag.GradeList = ListGrade;
}

public IActionResult Index()
{
    FillCombo();
    return View();
}

خب حالا تو View هم میتونید خیلی راحت ViewBag رو دریافت کنید و تگ Select رو مقداردهی کنید.

 

@{
    ViewData["Title"] = "Title";
    List<BranchGrade> MyBranchGrade = ViewBag.BranchGrade;
}

<div class="form-group">
    <label asp-for="BranchGradeId" class="col-lg-4 col-sm-4 control-label"></label>
    <div class="col-lg-6">
        <select asp-for="BranchGradeId" asp-items="@(new SelectList(MyBranchGrade ,"Id","Grade"))" class="form-control">
        </select>
    </div>
</div>

 

خب توسط دستورات بالا شما به راحتی میتونید اطلاعات رو داخل تگ Select نمایش بدید. حالا تگ Select شما BranchGradeId هست و Id و name دقیقا BranchGradeId هست. و توی کنترلر هم به راحتی مقدارش دریافت میشه.

به این پاسخ امتیاز بدهید    0
امتیاز: 1635 رتبه: 2
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود