在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);

在mvc 4c#中传递变量/模型

如果视图需要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,最坏的情况是它是一个空列表,在视图中更容易管理。