Asp.Net MVC 核心 ViewModel 和模型组合问题
Asp.Net MVC Core ViewModel and Model Combining Problem
我是 Mvc 和 Core 的新手,所以我对一个视图中的模型有疑问。我现在已经有一个作为 Webforms 工作的项目。所以我建立了一个新项目并完成了最大的部分。这就是我的问题:
我附上了错误。所以有我的代码:
public class SiparisViewModel
{
public siparis_detay SIPARISDETAYI { get; set; }
public STOKCAMLAR STOKCAMLAR { get; set; }
}
这是我的 SiparislerController 代码:
[HttpGet]
public IActionResult OlcuGirisi(int id)
{
ViewData["Title"] = "Sipariş Detayı";
ViewData["sipno"] = id;
string connectionString = configuration.GetConnectionString("DefaultConnection");
//List<STOKCAMLAR> camlistesi = new List<STOKCAMLAR>();
using (SqlConnection baglanti = new SqlConnection(connectionString))
{
string kayit = $"select * from STOKCAMLAR WHERE ID ='{id}'";
SqlCommand komut = new SqlCommand(kayit, baglanti);
komut.CommandType = CommandType.Text;
baglanti.Open();
SqlDataReader reader = komut.ExecuteReader();
if (reader.Read())
{
STOKCAMLAR camlar = new STOKCAMLAR();
camlar.ID = Convert.ToInt32(reader["ID"]);
camlar.CAMSTOKKODU = reader["CAMSTOKKODU"].ToString();
camlar.CAMACIKLAMA = reader["CAMACIKLAMA"].ToString();
/// goes like this.
return View(camlar);
}
baglanti.Close();
}
return View();
}
[HttpPost]
public IActionResult OlcuGirisi(SiparisViewModel siparisviewmodel)
{
int id = 0;
ViewData["sipno"] = id;
string connectionString = configuration.GetConnectionString("DefaultConnection");
using (SqlConnection baglanti = new SqlConnection(connectionString))
{
int siparisno = 901123;
string kayit = "insert into siparis_detay(Siparis_no,stok_id,stok_kodu) values (@siparisno,@stokid,@stokkodu)";
SqlCommand komut = new SqlCommand(kayit, baglanti);
komut.Parameters.AddWithValue("@siparisno", "901124");
komut.Parameters.AddWithValue("@stokkodu", "C0001");
komut.Parameters.AddWithValue("@stokid", "0");
/// it goes like this, long codes.
//Parametrelerimize Form üzerinde ki kontrollerden girilen verileri aktarıyoruz.
baglanti.Open();
komut.ExecuteNonQuery();
baglanti.Close();
return View("OlcuGirisi", siparisviewmodel)
这是我的观点:
@model KolaycamCore.ViewModel.SiparisViewModel
所以当我打开我的页面时 https://localhost:44364/Siparisler/OlcuGirisi/5 它给我这个错误:
An unhandled exception occurred while processing the request.
InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'KolaycamCore.Models.STOKCAMLAR', but this ViewDataDictionary instance requires a model item of type 'KolaycamCore.ViewModel.SiparisViewModel'.
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.EnsureCompatible(object value)
那我做错了什么?
您传递的模型错误,您必须传递 SiparisViewModel 而不是 STOKCAMLAR
因为您的视图需要 SiparisViewModel ,所以您 return 视图的代码如下,
if (reader.Read())
{
SiparisViewModel siparis = new SiparisViewModel();
siparis.ID = Convert.ToInt32(reader["ID"]);
siparis.CAMSTOKKODU = reader["CAMSTOKKODU"].ToString();
siparis.CAMACIKLAMA = reader["CAMACIKLAMA"].ToString();
/// goes like this.
return View(siparis);
}
我是 Mvc 和 Core 的新手,所以我对一个视图中的模型有疑问。我现在已经有一个作为 Webforms 工作的项目。所以我建立了一个新项目并完成了最大的部分。这就是我的问题:
我附上了错误。所以有我的代码:
public class SiparisViewModel
{
public siparis_detay SIPARISDETAYI { get; set; }
public STOKCAMLAR STOKCAMLAR { get; set; }
}
这是我的 SiparislerController 代码:
[HttpGet]
public IActionResult OlcuGirisi(int id)
{
ViewData["Title"] = "Sipariş Detayı";
ViewData["sipno"] = id;
string connectionString = configuration.GetConnectionString("DefaultConnection");
//List<STOKCAMLAR> camlistesi = new List<STOKCAMLAR>();
using (SqlConnection baglanti = new SqlConnection(connectionString))
{
string kayit = $"select * from STOKCAMLAR WHERE ID ='{id}'";
SqlCommand komut = new SqlCommand(kayit, baglanti);
komut.CommandType = CommandType.Text;
baglanti.Open();
SqlDataReader reader = komut.ExecuteReader();
if (reader.Read())
{
STOKCAMLAR camlar = new STOKCAMLAR();
camlar.ID = Convert.ToInt32(reader["ID"]);
camlar.CAMSTOKKODU = reader["CAMSTOKKODU"].ToString();
camlar.CAMACIKLAMA = reader["CAMACIKLAMA"].ToString();
/// goes like this.
return View(camlar);
}
baglanti.Close();
}
return View();
}
[HttpPost]
public IActionResult OlcuGirisi(SiparisViewModel siparisviewmodel) {
int id = 0;
ViewData["sipno"] = id;
string connectionString = configuration.GetConnectionString("DefaultConnection");
using (SqlConnection baglanti = new SqlConnection(connectionString))
{
int siparisno = 901123;
string kayit = "insert into siparis_detay(Siparis_no,stok_id,stok_kodu) values (@siparisno,@stokid,@stokkodu)";
SqlCommand komut = new SqlCommand(kayit, baglanti);
komut.Parameters.AddWithValue("@siparisno", "901124");
komut.Parameters.AddWithValue("@stokkodu", "C0001");
komut.Parameters.AddWithValue("@stokid", "0");
/// it goes like this, long codes.
//Parametrelerimize Form üzerinde ki kontrollerden girilen verileri aktarıyoruz.
baglanti.Open();
komut.ExecuteNonQuery();
baglanti.Close();
return View("OlcuGirisi", siparisviewmodel)
这是我的观点:
@model KolaycamCore.ViewModel.SiparisViewModel
所以当我打开我的页面时 https://localhost:44364/Siparisler/OlcuGirisi/5 它给我这个错误:
An unhandled exception occurred while processing the request. InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'KolaycamCore.Models.STOKCAMLAR', but this ViewDataDictionary instance requires a model item of type 'KolaycamCore.ViewModel.SiparisViewModel'. Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.EnsureCompatible(object value)
那我做错了什么?
您传递的模型错误,您必须传递 SiparisViewModel 而不是 STOKCAMLAR
因为您的视图需要 SiparisViewModel ,所以您 return 视图的代码如下,
if (reader.Read())
{
SiparisViewModel siparis = new SiparisViewModel();
siparis.ID = Convert.ToInt32(reader["ID"]);
siparis.CAMSTOKKODU = reader["CAMSTOKKODU"].ToString();
siparis.CAMACIKLAMA = reader["CAMACIKLAMA"].ToString();
/// goes like this.
return View(siparis);
}