دسته بندی ها
17:59 1398/10/21

ارسال همزمان دو مدل به یک ویو در asp.net core

مشخصات سوال کننده :
کاربر : sunboyali     امتیاز کاربر : 21     رتبه کاربر : 31
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 4211
هوش مصنوعی

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

برای ارسال همزمان دو مدل به یک ویو در ASP.NET Core، شما می توانید یک مدل جدید ایجاد کنید که شامل هر دو مدل مورد نظر باشد.

به عنوان مثال، مدل جدیدی به نام `CityViewModel` ایجاد کنید که شامل لیست شهرها و یک ویژگی برای نام شهر باشد:


public class CityViewModel
{
    public IEnumerable Cities { get; set; }
    public string CityName { get; set; }
}

سپس در اکشن `Index` در کنترلر، از این مدل جدید استفاده کنید و مقداردهی آن را انجام دهید:


public IActionResult Index()
{
    var viewModel = new CityViewModel
    {
        Cities = _iadmin.FillCites(),
        CityName = string.Empty // مقدار اولیه برای CityName
    };

    return View(viewModel);
}

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

@model CityViewModel

سپس می توانید لیست شهرها را به همراه فرم برای ارسال نام شهر در ویو نمایش دهید:


@foreach (var city in Model.Cities) { }
نام شهر
@city.Name

در نهایت، اطمینان حاصل کنید که اکشن برای ارسال فرم اضافه شده و بعد از ارسال، داده ها را با استفاده از `CityViewModel` دریافت کنید:


[HttpPost]
public IActionResult Index(CityViewModel model)
{
    if (ModelState.IsValid)
    {
        // ذخیره CityName به دیتابیس
    }

    model.Cities = _iadmin.FillCites(); // دوباره لیست شهرها را پر کنید 
    return View(model);
}

با این کار، شما می توانید هر دو مدل را به طور موثق در یک ویو نشان داده و داده ها را مدیریت کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 20:24 1398/10/21

با سلام و درود

 

شما می تونید یک پوشه در لایه Data یا در پوشه Model خودتون درست کنید و اسم اون رو مثلا بذارید ComplexViewModel. سپس یک Class ایجاد کنید با نام دلخواه. مثلا نامش رو بذارید CityComplexViewModel و در این کلاس هر 2 مدل رو تعریف کنید.

 

در تصویر زیر این کار انجام شده (البته نامها در تصویر متفاوته چون نام دلخواه هست.)

ارسال همزمان دو مدل به ویو

 

    public class CityComplexViewModel
    {
        public City City{ get; set; }
        public Provience Provience { get; set; }
    }

 

همونطوری که در کلاس CityComplexViewModel مشاهده می کنید 2 پراپرتی ایجاد کردیم که یکی همون جدول City هست و دیگری جدول Provience هست . حالا شما از مدل بالا می تونید در View خودتون استفاده کنید

 

@model CityComplexViewModel

برای ارسال همزمان دو مدل به یک ویو در asp.net core می تونید از روش بالا استفاده کنید.

 

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

 

<div class="form-group">
    <label asp-for="City.CityName" class="control-label"></label>
    <input asp-for="City.CityName" class="form-control" />
    <span asp-validation-for="City.CityName" class="text-danger"></span>
</div>


///یا برای استفاده از مدل دوم

<div class="form-group">
    <label asp-for="Provience.Name" class="control-label"></label>
    <input asp-for="Provience.Name" class="form-control" />
    <span asp-validation-for="Provience.Name" class="text-danger"></span>
</div>

 

البته در این مثال من دقیقا از کدهای شما استفاده نکردم ولی روش دقیقا همین هست.

موفق باشید

به این پاسخ امتیاز بدهید    2
امتیاز: 1664 رتبه: 1
پاسخ دهنده : sunboyali 10:46 1398/10/22

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

@model IEnumerable<Football.DataLayer.Entities.City>

یعنی یک مدل برای نمایش شهر ها و یک مدل هم برای ارسال مقادیر شهر ها به دیتابیس؟

به این پاسخ امتیاز بدهید    0
امتیاز: 21 رتبه: 31
پاسخ دهنده : saedbfd 14:38 1398/10/22

فرقی با حالت قبلی نمی کنه. شما میتونید از این حالت هم برای لیست استفاده کنید و هم برای یک رکورد

 

  public class CityComplexViewModel
    {
        public List<City> City{ get; set; }
        public List<Provience> Provience { get; set; }
    }

 

این حالت مثل حالتی هست که یک Model به ویو ارسال میشه. تنها تفاوت اینه که چون بیشتر از یک مدل داریم از یک کلاس واسط استفاده می کنیم تا بتونیم همه مدل ها رو توی یک Model جمع آوری کنیم

به این پاسخ امتیاز بدهید    1
امتیاز: 1664 رتبه: 1
پاسخ دهنده : sunboyali 20:54 1398/11/03

ممنون آقای بحرانی فرد اما به یک مشکل خوردم اون هم اینه بخوام هر دو مدل رو برگردونم به صفحه index خطا میده 
 

public IActionResult IndexCity(int id)
{
            CityComplexViewModel city = new CityComplexViewModel();
            if(id == 0)
            {
                city.CityList = _iadmin.FillCites();
                return View(city);
            }
            else
            {
                city.City = _iadmin.FillCityById(id);
                return View(city);
            }
}

به هر شکلی می فرستم باز با خطا مواجه میشم
 

public IActionResult IndexCity(int id)
{
            CityComplexViewModel city = new CityComplexViewModel();
            if(id == 0)
            {
                city.CityList = _iadmin.FillCites();
                return View(city.CityList);
            }
            else
            {
                city.City = _iadmin.FillCityById(id);
                return View(city.City);
            }
}

به شکل بالا هم return می کنم باز خطا می ده چطور می تونم شرط کنم که اگر id مساوی با 0 بود فقط یک مدل ارسال بشه؟

ویرایش شده در یکشنبه 9 آبان 1400 ساعت 17:56:35
به این پاسخ امتیاز بدهید    0
امتیاز: 21 رتبه: 31
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود