Вопрос по c#, icollection, one-to-many, asp.net-mvc – как передать один-ко-многим из контроллера для просмотра в mvc4

1

Итак, это будет после изменений, с которыми вы, ребята, помогли мне, я предполагаю, что я где-то получаю синтаксическую ошибку

Посмотреть

@model OilNGasWeb.ModelData.Clients

@{
ViewBag.Title = "Index";
}


County's for  

<p>
@Html.ActionLink("Create New", "Create",new { id = Model.ClientID },null) 
</p>





    
        @Html.DisplayNameFor(model => model.County) 
    

    
        @Html.DisplayNameFor(model => model.Note) 
    

    
        @Html.DisplayNameFor(model => model.Comment) 
    



@foreach (var item in Model.Countys) {


    
        @Html.DisplayFor(modelItem => item.County)
    

    
        @Html.DisplayFor(modelItem => item.Note)
    

    
        @Html.DisplayFor(modelItem => item.Comment)
    

    
        @Html.ActionLink("Edit", "Edit", new { id=item.CountyID }) 
        @Html.ActionLink("Details", "Details", new { id=item.CountyID }) 
        @Html.ActionLink("Delete", "Delete", new { id=item.CountyID })
    


}


Клиенты модели

 [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 { get; set; }

}

Модель Граф

 [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 { get; set; }

}

Графический контроллер

public ActionResult Index(int id)
{
var cnty = from r in db.Clients
where r.ClientID == id
select r;
if (cnty != null)
{
return View(cnty); // View returns an error here
}
return HttpNotFound();

View возвращает ошибку, но я не могу зайти в нее ... чтобы выяснить, что это ... идеи?

Ваш Ответ

2   ответа
2

которые не являются частью вашей доменной модели, и передавать их практически во все виды.

Посмотреть модель:

public class IndexViewModel
{
  public int ClientID { get; set; }
  public IEnumerable<clients> Clients { get; set; }
}
</clients>

Просмотр (.cshtml): Я

@model OilNGasWeb.Models.Home.IndexViewModel

@{
  ViewBag.Title = "Index";
}


<h2>County's for </h2> 

<p>
  // send a ClientID with this action link
  @Html.ActionLink("Create New", "Create", new { clientid = Model.ClientID } ) 
</p>

//... etc

Я также рекомендую указать ваши переменные. Все это компилируется, так чтоКак правило, лучше писать поддерживаемый код поверх кратких переменных.

контроллер

public ActionResult Index(int id)
{
  //Lambda (just for an example, there is nothing wrong with LINQ expressions)
  var client = db.Clients
    .FirstOrDefault(c => c.ClientID == id);

  if (client != null)
  {
    var model = new IndexViewModel();
    model.ClientID = id;
    model.Clients = // some value I don't understand

    // My preference/opinion (programming religion) is to prefix with this
    // so others know if the method is *this* class, *base* class etc
    return this.View(model); 
  }

  return HttpNotFound();
}
я не уверен, чтоничего не сработало средства. Erik Philips
спасибо будет реализовать сообщить утром Pakk
Я хотел сказать, что ничего не было передано, кроме ClientID, из модели клиента, использующей Linq или Lambda, должен был найти этот метод BIND, и он передал все данные моих моделей, я очень хотел обновить всех Pakk
просто между прочим, как ни странно, ничего не работало linq или лямбда, но это сделал[Bind (Префикс =»Я бы")] int CID) {var clnt = db.Clients.Find (CID); if (clnt! = null) {return View (clnt); } return HttpNotFound (); I ' Pakk
1

данные, необходимые представлению, находятся на другом уровне, чемПроходят Вы'в настоящее время отправляюIEnumerable на вид. Но, как вы спросите, что происходит, когда перечисление пусто? Где представление может получить другие данные, которые ему нужны? (В этом случаеClientID.)

Какой видна самом деле потребности этоClients, Потому что это'ищет кусокClientsданные, а именноClientID, Конечно, эти данные также существуют наCountys объекты, но этоне имеет значения для концептуальной природы самих данных. Представление в этом случае показывает информацию оClients объект. В частности:

int ClientID
IEnumerable<countys> Countys
</countys>

Если последний из этих двух нетогда пустоМожно быть обнаруженным непосредственно из этих данных. Это также может быть выявлено по совершенно другим и не связанным данным. Но дело в том, что точка зрения концептуально действует наClients уровень, а не наIEnumerable уровень.

Так что вы'd соответственно измените представление и передайте ему нужный объект:

public ActionResult Index(int id)
{
    var client = (from r in db.Clients
                 where r.ClientID == id
                 select r).SingleOrDefault();

    if (client != null)
        return View(client);

    return HttpNotFound();
}
@Pakk: в чем ошибка? Это может быть что-то совершенно не связанное с рассматриваемым вопросом и заслуживающее совершенно нового вопроса. Первоначальная проблема заключалась в том, как передать другой тип модели в представление, которое мымы сделали. David
@Pakk: Вы можете перебратьCountys имущество тот'на модели. Что-то вроде:foreach (var county in model.Countys) David
Обновил вопрос, чтобы показать, что у меня есть в моем коде сейчас, у меня нет синтаксической ошибки из-за ошибки msg, поэтому я запутался в том, почему она вызывает ошибку, и во-вторых, почему я могу 'шаг за шагом, чтобы решить проблему ... есть идеи? Pakk
если бы я закомментировал все, кроме заголовка, и @ model OilNGasWeb.ModelData.Clients, я все равно получил бы ошибку ... в том же состоянии и удалив строку @ model OilNGasWeb.ModelData.Clients, я получил отображаемое представление .. ... идеи о том, почему это ошибка? Pakk

Похожие вопросы