Câmpuri de grup ASP.NET MVC5 Entity Framework (Țară, Stat) pentru Cont

Am clase de Companie, Țară și Stat. Statul este legat de Țară Statul și Țara sunt cheia străină pentru companie

Problema Vizualizarea companiei afișează atât statul, cât și țara ca meniuri derulante separate. Dar mă aștept, când selectez Stat, Țara corespunzătoare să se schimbe sau invers. Este posibil acest lucru în modelul MVC5 EF.

Clasa companiei

public class Company
{
    public int CompanyID { get; set; }
    [Required]
    [StringLength(100,MinimumLength=3)]
    public string Name { get; set; }
    [StringLength(200)]
    public string Address { get; set; }
    public int? StateID { get; set; }
    public virtual State State { get; set; }
    public int? CountryID { get; set;}
    public virtual Country Country { get; set; }
    public int CompanyTypeID { get; set; }
    public virtual CompanyType CompanyType { get; set; }

}

Clasa de țară

public class Country
{
    public int CountryID { get; set; }
    [Required]
    [StringLength(100)]
    public string Name { get; set; }
    public virtual ICollection<State> States { get; set; }
    public virtual ICollection<Company> Companies { get; set; }
}

Clasa de stat

public class State
{
    public int StateID { get; set; }
    [Required]
    [StringLength(100)]
    public string Name { get; set; }
    public int CountryID { get; set; }
    public virtual Country Country { get; set; }

    public virtual ICollection<Company> Companies { get; set; }

}

Am schelă și am generat vizualizarea și vizualizarea companiei pentru referință

@using (Html.BeginForm()) {
@Html.AntiForgeryToken()

<div class="form-horizontal">
    <h4>Company</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.Address, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Address, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Address, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.StateID, "StateID", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("StateID", null, htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.StateID, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.CountryID, "CountryID", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("CountryID", null, htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.CountryID, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.CompanyTypeID, "CompanyTypeID", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("CompanyTypeID", null, htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.CompanyTypeID, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
</div> } <div> @Html.ActionLink("Back to List", "Index")

@section Scripturi { @Scripts.Render("~/bundles/jqueryval") }

Orice ajutor ar fi apreciat


person Gopi    schedule 16.07.2015    source sursă


Răspunsuri (2)


Ceea ce aveți nevoie sunt liste derulante în cascadă. Iată un exemplu din CodeProject.

http://www.codeproject.com/Articles/258172/Simple-Implementation-of-MVC-Cascading-Ajax-Drop-D

person LSU.Net    schedule 16.07.2015
comment
Mulțumesc, Indiferent dacă există vreo posibilitate, să grupez aceste două proprietăți în Model și Controller, astfel încât Visual studio să poată genera codul pentru mine. - person Gopi; 16.07.2015
comment
Nu. Va trebui să scrieți codul. Controalele HTML nu au conceptul de dependență, așa cum au subliniat alții - person LSU.Net; 16.07.2015

Este posibil acest lucru în modelul MVC5 EF.

Da. Dar va trebui să faceți treaba (sau să obțineți (cumpărați) controale care o fac pentru dvs.).

Limitarea nu este MVC, ci că controalele HTML implicite nu au conceptul de a fi dependente de altul. Fie scrieți cod pentru a modifica conținutul meniului derulant State atunci când se modifică meniul drop-down Țară (aceasta ar putea include filtrarea listei de state în funcție de țara selectată), fie obțineți controale de la terți care fac acest lucru (este o cerință comună, astfel încât multe controlează acolo1).


1 Dar Stack Overflow nu face recomandări de instrumente.

person Richard    schedule 16.07.2015
comment
Nu caut să folosesc controale de la terți. Deci singura opțiune este să faceți acest lucru manual în View sau există vreo soluție - person Gopi; 16.07.2015