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

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

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

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

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

امتیاز کاربر : 17   رتبه کاربر : 41   تاریخ ثبت : 01:56 1399/12/02
پاسخ دهنده : 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
امتیاز: 1617 رتبه: 2
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود