Asp.net mvc ASP.NET MVC:具有模型的连接控制器
我还在学习,但在stackoverflow commnuties的帮助下,我已经能够越来越近了 我现在看到的是一个视图“Index.aspx”: 以及控制器:Asp.net mvc ASP.NET MVC:具有模型的连接控制器,asp.net-mvc,stored-procedures,uiviewcontroller,Asp.net Mvc,Stored Procedures,Uiviewcontroller,我还在学习,但在stackoverflow commnuties的帮助下,我已经能够越来越近了 我现在看到的是一个视图“Index.aspx”: 以及控制器: public ActionResult Index() { LinqToDealsDataContext db = new LinqToDealsDataContext(); XElement xmlTree = XElement.Parse("<Request>
public ActionResult Index()
{
LinqToDealsDataContext db = new LinqToDealsDataContext();
XElement xmlTree = XElement.Parse("<Request><ZipCode>92612</ZipCode></Request>");
var deals = db.spSearchDeals(xmlTree);
return View(deals);
}
public ActionResult Index()
{
return(DealService.GetByZipcode(92612));
}
我猜我的控制器和我的模型之间存在连接问题。。。我不知道为什么。请帮我连接这个最后的电话
注意:我确实理解,最终我应该将控制器中的逻辑分离为存储库模式,但现在,这样就可以了。您需要转换此调用返回的数据:
var deals = db.spSearchDeals(xmlTree);
进入GetDealsModel
类型。比如:
GetDealsModel dealsModel = new GetDealsModel()
{
DealId = deals.DealId,
StreetAddress = deals.StreetAddress,
....
};
return View(dealsModel);
return new GetDealsModel
{
DealId = deals.Id,
// other fields here
}
原因是您的视图是强类型的,以获取
GetDealsModel
,但您的deals
变量不是该类型,当您将其传递给视图时,它会给您该异常。您需要转换此调用返回的数据:
var deals = db.spSearchDeals(xmlTree);
进入GetDealsModel
类型。比如:
GetDealsModel dealsModel = new GetDealsModel()
{
DealId = deals.DealId,
StreetAddress = deals.StreetAddress,
....
};
return View(dealsModel);
return new GetDealsModel
{
DealId = deals.Id,
// other fields here
}
原因是您的视图是强类型的,以获取
GetDealsModel
,但您的deals
变量不是该类型,当您将其传递给视图时,它会给您该异常。您应该创建GetDealsModel类型的对象,但您的DB查询返回Data.Models.spSearchDealsResult类型的对象。尝试以下方法:
GetDealsModel dealsModel = new GetDealsModel()
{
DealId = deals.DealId,
StreetAddress = deals.StreetAddress,
....
};
return View(dealsModel);
return new GetDealsModel
{
DealId = deals.Id,
// other fields here
}
返回新的GetDealsModel
{
DealId=deals.Id,
//这里还有其他领域
}
您应该创建GetDealsModel类型的对象,但DB查询返回Data.Models.spSearchDealsResult类型的对象。尝试以下方法:
GetDealsModel dealsModel = new GetDealsModel()
{
DealId = deals.DealId,
StreetAddress = deals.StreetAddress,
....
};
return View(dealsModel);
return new GetDealsModel
{
DealId = deals.Id,
// other fields here
}
返回新的GetDealsModel
{
DealId=deals.Id,
//这里还有其他领域
}
将以下项目添加到您的学习曲线中:
public ActionResult Index()
{
LinqToDealsDataContext db = new LinqToDealsDataContext();
XElement xmlTree = XElement.Parse("<Request><ZipCode>92612</ZipCode></Request>");
var deals = db.spSearchDeals(xmlTree);
return View(deals);
}
public ActionResult Index()
{
return(DealService.GetByZipcode(92612));
}
其中DealService.GetByZipcode基本上只是将DealRepository.GetByZipcode(92612)映射到模型类并返回映射结果
DealRepository.GetByZipcode方法大致如下:
public static DealEntity GetByZipcode(string zip)
{
LinqToDealsDataContext db = new LinqToDealsDataContext();
XElement xmlTree = XElement.Parse("<Request><ZipCode>" + zip + "</ZipCode></Request>");
var deals = db.spSearchDeals(xmlTree);
return deals;
}
publicstaticdealentity GetByZipcode(字符串zip)
{
LinqToDealsDataContext db=新的LinqToDealsDataContext();
XElement xmlTree=XElement.Parse(“+zip+”);
var deals=db.spSearchDeals(xmlTree);
退货交易;
}
DealEntity类就是Linq为您的表提供的任何内容
原因是:
这种结构的原因如下:
a。所有数据访问代码都位于一个位置:DealRepository。您可以独立于其他内容来测试和调试它
b。映射代码都在一个地方:DealService。您可以独立于其他内容来测试和调试它
c。换言之,您需要适当地分离您的关注点
现有代码的问题正是没有将关注点分开。也就是说,你用了一点MVC,然后把它放进了一个食品加工机,结果遇到了一大堆问题,这些问题比他们需要的要难处理得多
您的模型混合到控制器中,没有存储库,没有服务层
因此,请稍等片刻,花点时间阅读史蒂夫·桑德森的书
我也会尝试建模一个更简单的问题。即使在好天气,xml解析也会让我头疼
注:
您可以认真改进您的命名约定。LINQTodelSDataContext?你在开玩笑吧?在你的学习曲线中添加以下项目:
public ActionResult Index()
{
LinqToDealsDataContext db = new LinqToDealsDataContext();
XElement xmlTree = XElement.Parse("<Request><ZipCode>92612</ZipCode></Request>");
var deals = db.spSearchDeals(xmlTree);
return View(deals);
}
public ActionResult Index()
{
return(DealService.GetByZipcode(92612));
}
其中DealService.GetByZipcode基本上只是将DealRepository.GetByZipcode(92612)映射到模型类并返回映射结果
DealRepository.GetByZipcode方法大致如下:
public static DealEntity GetByZipcode(string zip)
{
LinqToDealsDataContext db = new LinqToDealsDataContext();
XElement xmlTree = XElement.Parse("<Request><ZipCode>" + zip + "</ZipCode></Request>");
var deals = db.spSearchDeals(xmlTree);
return deals;
}
publicstaticdealentity GetByZipcode(字符串zip)
{
LinqToDealsDataContext db=新的LinqToDealsDataContext();
XElement xmlTree=XElement.Parse(“+zip+”);
var deals=db.spSearchDeals(xmlTree);
退货交易;
}
DealEntity类就是Linq为您的表提供的任何内容
原因是:
这种结构的原因如下:
a。所有数据访问代码都位于一个位置:DealRepository。您可以独立于其他内容来测试和调试它
b。映射代码都在一个地方:DealService。您可以进行测试和调试