ارسال همزمان دو مدل به یک ویو در asp.net core
دوستان خسته نباشید من در کنترلم اکشن ایندکس دارم
public IActionResult Index()
{
List<City> cities = _iadmin.FillCites();
City city = new City();
return View(cities);
}
یک ویو هم ساختم براش که هم اطلاعات دیتابیس رو تو جدول نمایش میده که از مدل زیر استفاده کردم
@model IEnumerable<Football.DataLayer.Entities.City>
حال من می خوام علاوه اینکه در این ویو مطالب رو نمایش بده یک فرم هم ایجاد کنم که نام شهر رو برام ارسال کنه
<div class="form-group">
<label asp-for="CityName" class="control-label"></label>
<input asp-for="CityName" class="form-control" />
<span asp-validation-for="CityName" class="text-danger"></span>
</div>
حالا من نیاز به این cityname دارم که تو asp-for استفاده کردم چطور این مدل را هم به این ویو ارسال کنم که بتونم فرمم را ارسال کنم به دیتابیس
درواقع باید دوتا مدل داشته باشم چطور این کارو انجام بدم ممنون
درواقع من از یک جدول می خوام هم به صورت لیست دریافت کنم هم بصورت ساده
@model IEnumerable<Football.DataLayer.Entities.City>
پاسخ هوش مصنوعی
برای ارسال همزمان دو مدل به یک ویو در 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);
}
با این کار، شما می توانید هر دو مدل را به طور موثق در یک ویو نشان داده و داده ها را مدیریت کنید.
با سلام و درود
شما می تونید یک پوشه در لایه 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>
البته در این مثال من دقیقا از کدهای شما استفاده نکردم ولی روش دقیقا همین هست.
موفق باشید
ممنون از پاسختون حالا اگر بخوام یک لیستی از شهر هارو بگیرم باید چکار کنم؟
@model IEnumerable<Football.DataLayer.Entities.City>
یعنی یک مدل برای نمایش شهر ها و یک مدل هم برای ارسال مقادیر شهر ها به دیتابیس؟
فرقی با حالت قبلی نمی کنه. شما میتونید از این حالت هم برای لیست استفاده کنید و هم برای یک رکورد
public class CityComplexViewModel
{
public List<City> City{ get; set; }
public List<Provience> Provience { get; set; }
}
این حالت مثل حالتی هست که یک Model به ویو ارسال میشه. تنها تفاوت اینه که چون بیشتر از یک مدل داریم از یک کلاس واسط استفاده می کنیم تا بتونیم همه مدل ها رو توی یک Model جمع آوری کنیم
ممنون آقای بحرانی فرد اما به یک مشکل خوردم اون هم اینه بخوام هر دو مدل رو برگردونم به صفحه 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 بود فقط یک مدل ارسال بشه؟
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2