ASP MVC Using a ViewModel
本文关键字:ViewModel Using MVC ASP | 更新日期: 2023-09-27 18:15:23
我的情况下,我想有两个模型在我的视图。我一直试图做到这一点,在下面的控制器,但我不确定如何正确的方式是做到这一点,但我假设它的东西与WellViewModel的实例,然后创建和添加到各自的列表,WellViewModel包含,但我认为我已经混淆了一点,因为我似乎不能让它工作。有提示吗?
这些是我的模型,我已经放入ViewModel:
public class WellViewModel
{
public List<WellModel> Wells { get; set; }
public List<AnnotationModel> Annotations { get; set; }
}
这是我从数据库中检索数据的地方:
public ActionResult Well(string slideid)
{
WellViewModel model = new WellViewModel();
string cs = dbPath;
using (SQLiteConnection con = new SQLiteConnection(cs))
{
string stm = "SELECT * FROM Well WHERE SlideId = " + "'" + slideid + "'";
con.Open();
using (SQLiteCommand cmd = new SQLiteCommand(stm, con))
{
using (SQLiteDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
model.Wells = new List<WellModel>() { new WellModel()} //This is not possible to do
{
SlideId = rdr["SlideId"].ToString(),
Well = int.Parse(rdr["Well"].ToString()),
TimeStamp = rdr["TimeStamp"].ToString()
};
}
rdr.Close();
}
}
con.Close();
}
using (SQLiteConnection con = new SQLiteConnection(cs))
{
string stm = "SELECT * FROM Annotation WHERE SlideId = " + "'" + slideid + "'";
con.Open();
using (SQLiteCommand cmd = new SQLiteCommand(stm, con))
{
using (SQLiteDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
Annotations = new AnnotationModel
{
SlideId = rdr["SlideId"].ToString(),
Well = int.Parse(rdr["Well"].ToString()),
Par = rdr["Par"].ToString(),
Time = rdr["Time"].ToString(),
Val = rdr["Val"].ToString(),
TimeStamp = rdr["TimeStamp"].ToString()
};
}
rdr.Close();
}
}
con.Close();
}
return View(model);
}
在您的while
循环中,您创建了一个新的List<WellModel>
并添加了单个项目。
应该这样定义:
WellViewModel model = new WellViewModel();
model.Wells = new List<WellModel>();
model.Annotations = new List<AnnotationModel>();
while (rdr.Read())
{
model.Wells.Add(new WellModel { // set values here };
}
对Annotations
的其他List
做同样的操作。
我看到你的代码的唯一问题是不正确的使用或阅读器填写数据列表。应该在读取循环外初始化列表,然后向其中添加新项:
model.Wells = new List<WellModel>();
using (SQLiteConnection con = new SQLiteConnection(cs))
{
....
while (rdr.Read())
{
WellModel well = new WellModel
{
SlideId = rdr["SlideId"].ToString(),
Well = int.Parse(rdr["Well"].ToString()),
TimeStamp = rdr["TimeStamp"].ToString()
};
model.Wells.Add(well);
}
另一个列表也是如此。
我认为这将是最好的,如果你添加一个Constructor
到你的WellViewModel
,你可以设置你的WellModel List
和你的AnnotationModel List
。
一样:
public class WellViewModel
{
public WellViewModel()
{
Wells = new List<WellModel>();
Annotaions = new List<AnnotationModel>();
}
public List<WellModel> Wells { get; set; }
public List<AnnotationModel> Annotations { get; set; }
}
在你的while循环中,你可以添加新的WellModel
/AnnotationModel
。
while (rdr.Read())
{
model.Wells.Add(new WellModel()
{
// set values here
});
}