在mvc 4c#中传递变量/模型
本文关键字:变量 模型 mvc 4c# | 更新日期: 2023-09-27 18:20:23
好的,所以我有两个型号的
模型客户端
[Table("Clients")]
public class Clients
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ClientID { get; set; }
public string Client { get; set; }
public string Address { get; set; }
public string State { get; set; }
public string City { get; set; }
public string County { get; set; }
public int Zip { get; set; }
public string Phone { get; set; }
public string LogoLocation { get; set; }
public string ContactName { get; set; }
public string ContactPhone { get; set; }
public string ContactEmail { get; set; }
public int Authorized { get; set; }
public string Note { get; set; }
public string Comment { get; set; }
public virtual ICollection<Countys> Countys { get; set; }
}
Model Countys
[Table("Countys")]
public class Countys
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int CountyID { get; set; }
public int ClientID { get; set; }
public string County { get; set; }
public string Note { get; set; }
public string Comment { get; set; }
public virtual ICollection<TownShips> Townships { get; set; }
}
**此时我的Countys索引控制器**
public ActionResult Index(int id)
{
var cnty = from r in db.Clients
where r.ClientID == id
select r;
if (cnty != null)
{
try
{
return View(cnty);
}
catch (Exception ex)
{
}
}
return HttpNotFound();
}
我的视图是标准生成的视图:
@model OilNGasWeb.ModelData.Clients
@{
ViewBag.Title = "Index";
}
<h2>County's for </h2>
<p>
@Html.ActionLink("Create New", "Create",new { id = Model.ClientID },null)
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Countys.First().County)
</th>
<th>
@Html.DisplayNameFor(model => model.Countys.First().Note)
</th>
<th>
@Html.DisplayNameFor(model => model.Countys.First().Comment)
</th>
</tr>
</Table>
异常:
System.InvalidOperationException:传递到字典中的模型项的类型为"System.Data.Entity.Infrastructure.DbQuery 1[OilNGasWeb.ModelData.Clients]', but this dictionary requires a model item of type 'OilNGasWeb.ModelData.Clients'. at System.Web.Mvc.ViewDataDictionary
1.SetModel(Object value)at System.Web.Mvc.WebViewPage 1.SetViewData(ViewDataDictionary viewData) at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1a. <InvokeActionResultWithFilters>b__17() at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func
1 continuation)at System.Web.Mvc.ControllerActionInvoker。<>c_显示类1a<>System.Web.Mvc.Anc.AncontrollerActionInvoker.InvokeActionResultWithFilters(ControllerContext ControllerContext,IList`1 filter,ActionResult-ActionResult)上的c_DisplayClass1c.bb19()。<>c_DisplayClass25.<>c_显示类2a。位于System.Web.Mvc.Anc.AncControllerActionInvoker的b_20()。<>c_DisplayClass25.b_22(IAsyncResult-asyncResult);
如果视图需要Clients
对象(包括Countys
对象的枚举),则需要将Clients
对象传递给视图:
public ActionResult Index(int id)
{
var client = (from r in Clients
where r.ClientID == id
select r).SingleOrDefault();
if (client != null)
{
return View(client);
}
return HttpNotFound();
}
在视图中,您将声明一个Clients
模型:
@model OilNGasWeb.ModelData.Clients
然后在视图中,您可以访问有关Clients
对象的信息,以及它所包含的Countys
对象的列表(可能为空)。从本质上讲,代码的"错误"在于,视图在逻辑上处于Clients
的上下文中(很难不说"Client",您可能想处理类名),但您给它的只是Countys
对象的枚举。
注意:为了更安全的代码,您可能需要将该枚举初始化为其值,以防在它是空列表的情况下没有填充它。您可以在类的构造函数中执行此操作。例如,如果您想将其初始化为List<Countys>
,那么构造函数可能是这样的:
public Clients()
{
Countys = new List<Countys>();
}
这样,属性就永远不是null
,最坏的情况是它是一个空列表,在视图中更容易管理。