ASP.NET MVC5 Entity Framework Group Kentät (maa, osavaltio) tilille

Minulla on yritys-, maa- ja osavaltioluokat. Osavaltio liittyy maahan Osavaltio ja maa ovat yrityksen ulkoavain

Ongelma Yritysnäkymä näyttää sekä osavaltion että maan erillisinä pudotusvalikoina. Mutta odotan, että kun valitsen Osavaltion, vastaavan maan pitäisi muuttua tai päinvastoin. Onko tämä mahdollista MVC5 EF -mallissa.

Yritysluokka

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; }

}

Maaluokka

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; }
}

Valtion luokka

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; }

}

Olen rakentanut ja luonut näkymän ja yritysnäkymän viitteeksi

@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 Skriptit { @Scripts.Render("~/bundles/jqueryval") }

Kaikki apu olisi tervetullutta


person Gopi    schedule 16.07.2015    source lähde


Vastaukset (2)


Tarvitset Cascading-pudotusluettelot. Tässä on esimerkki CodeProjectista.

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

person LSU.Net    schedule 16.07.2015
comment
Kiitos, onko mahdollista, ryhmitellä nämä kaksi ominaisuutta malliin ja ohjaimeen, jotta Visual studio voi luoda koodin minulle. - person Gopi; 16.07.2015
comment
Ei. Sinun on kirjoitettava koodi. HTML-ohjaimilla ei ole käsitettä riippuvuudesta, kuten muut ovat huomauttaneet - person LSU.Net; 16.07.2015

Onko tämä mahdollista MVC5 EF -mallissa.

Joo. Mutta sinun on tehtävä työ (tai hankittava (ostettava) säätimet, jotka tekevät sen puolestasi).

Rajoitus ei ole MVC, vaan se, että oletusarvoisilla HTML-ohjaimilla ei ole käsitystä siitä, että ne olisivat riippuvaisia ​​toisesta. Joko kirjoita koodi muuttaaksesi avattavan Osavaltio-valikon sisältöä, kun avattava Maa-valikko muuttuu (tämä voi sisältää osavaltioluettelon suodattamisen valitun maan mukaan), tai hanki kolmannen osapuolen hallintalaitteet, jotka tekevät niin (se on yleinen vaatimus, joten monet säätimet siellä1).


1 Mutta Stack Overflow ei suosittele työkaluja.

person Richard    schedule 16.07.2015
comment
En aio käyttää kolmannen osapuolen ohjaimia. Joten ainoa vaihtoehto on tehdä tämä manuaalisesti View-tilassa tai onko olemassa mitään ratkaisua - person Gopi; 16.07.2015