2

vs'12 , KendoUI, asp.net C# MVC4 Internet Application EF Code First

KendoUI DropDownList から Razor ビューの MVC コントローラーに値を渡す方法を確認したい

コントローラ

  [HttpPost]
  //[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(ViewModelCCTRST model) //, FormCollection  values)
    {

        if (ModelState.IsValid)
        {

            string clt = model.Clients;
            string cnt = model.Countys;
            string twn = model.TownShips;
            ...
             ...
            //string xx = values["Clients"];
            //       xx = values["Countys"];
            //       xx = values["TownShips"];
                     ...
                      ...

*clt、cnt、twnおよびその他の変数は常にnullです...なぜこれらが常にnullなのかという疑問があります**


かみそりビュー:

                @ @(Html.Kendo().DropDownListFor(m=>m.Ranges)
                      //.Name("ranges")
                      .HtmlAttributes(new { style = "width:300px"}) //, id = "ranges"})
                      .OptionLabel("Select Range...")
                      .DataTextField("RangeName")
                      .DataValueField("RangeID")
                      .DataSource(source => {
                          source.Read(read =>
                          {
                              read.Action("GetCascadeRanges", "AddCCCTRST")
                                  .Data("filterRanges");
                          })
                          .ServerFiltering(true);
                      })
                      .Enable(false)
                      .AutoBind(false)
                      .CascadeFrom("TownShips")
                )
                <script>
                    function filterRanges() {
                        return {
                            townShips: $("#TownShips").val()
                        };
                    }

私が試したこと

  • 設定 var text = dropdownlist.text();
  • setting var DDLtracts = $("#tracts").data("kendoDropDownList");

ID に関して、またはコントローラーに関して何を試しても、コントローラーで値を「読み取る」ことはできません。また、アクション リンクで値を取得して渡すこともできません。

助けてください!!


以下のmmillicanヘルプによるコメントごとのコードの更新

                string sct = model.Sections;
                string trt = model.Tracts;

ビューモデル

public class ViewModelCCTRST
{
    public string Clients { get; set; }
    public IEnumerable<dbClient> AvailableClients { get; set; }
    public string Countys { get; set; }
    public IEnumerable<dbCounty> AvailableCounties { get; set; }
    public string TownShips { get; set; }
    public IEnumerable<dbTownShip> AvailableTownShip { get; set; }
    public string Ranges { get; set; }
    public IEnumerable<dbRange> AvailableRanges { get; set; }
    public string Sections { get; set; }
    public IEnumerable<dbSection> AvailableSection { get; set; }
    public string Tracts { get; set; }
    public IEnumerable<dbTract> AvailableTracts { get; set; }
}

これまでに行ったことは次のとおりです。

  • 削除[AcceptVerbs(HttpVerbs.Post)]FormCollection valuesれ、コントローラーから
  • 各 DropDownList から削除//.Name("Tracts")され、省略可能.HtmlAttributes(new { id = "tracts"})
  • DropDownListFor(m=>m.Tracts)DDL ごとに追加され、インポートされた@model OG.ModelView.ViewModelCCTRST CustomViewModel は以下で読むことができます
  • すべての小文字.CascadeFrom("clients")(クライアントだけでなく) の名前を大文字に変更.CascadeFrom("Clients")

以下の alert("Select Tract to Upload:\n....); というタグは、これらの変更中に実際に 1 回アラートを出しましたが、Razor ビューからアクションリンクで送信しようとしているモデルと変数はどちらも null のままです。アラートがポップアップしなくなりました。

    $(document).ready(function () {
        $("#get").click(function () {
            var clients = $("#Clients").data("kendoDropDownList"),
            countys = $("#Countys").data("kendoDropDownList"),
            TownShip = $("#TownShip").data("kendoDropDownList"),
            ranges = $("#Ranges").data("kendoDropDownList"),
            sections = $("#Sections").data("kendoDropDownList"),
            tracts = $("#Tracts").data("kendoDropDownList");

      var clientsInfo = "\nclients: { id: " + clients.value() + ", name: " + clients.text() + " }",
      countysInfo = "\ncountys: { id: " + countys.value() + ", name: " + countys.text() + " }",
       ....
        ....

      alert("Select Tract To Upload:\n" + clientsInfo + countysInfo + townShipsInfo + rangesInfo + sectionsInfo + tractsInfo);
           });
    });

アップデート

修正された構文の問題により、scipt エラーが修正されました。現在clientsInfo + countysInfo + townShipsInfo + rangesInfo + sectionsInfo + tractsInfo、データが取り込まれています - これは誰かがこれを私のコントローラーに届けるのに役立ちますか?

asdf

4

1 に答える 1

2

ViewModel次のようなプロパティを含む を使用する必要があります。

更新しました

public class MyViewModel
{
    public string Clients { get; set; }
    public IEnumerable<Client> AvailableClients { get; set; }
    public string Countys { get; set; }
    public IEnumerable<Client> AvailableCounties { get; set; }
    public string TownShips { get; set; }
    public IEnumerable<Client> AvailableTownShips { get; set; }
    public string Sections { get; set; }
    public IEnumerable<Client> AvailableSection { get; set; }
    public string Tracts { get; set; }
    public IEnumerable<Tract> AvailableTracts { get; set; }
}

次に、Kendo DropDownList は次のようになりDropDownListFor<>ます。

@(Html.Kendo().DropDownListFor(m => m.Clients)
                  .HtmlAttributes(new { style = "width:300px"}) //, id = "clients"})
                  .OptionLabel("Select Client...")
                  .DataTextField("ClientName")
                  .DataValueField("ClientID")
                  .DataSource(source => {
                       source.Read(read => {
                           read.Action("GetCascadeClients", "ImageUpload");
                       });
                  })
                 ***1***
            )

そして、次の方法でコントローラーに投稿できます。

[HttpPost]
    public ActionResult Index(MyViewModel model)
    {

        if (ModelState.IsValid)
        {

            var newVar = model.Clients;

ViewModel を (コントローラーから) ビューに返し、MyViewModel.Clients の値が "Client1" の場合、DropDownList はそれを取得し、選択した値にします。

うまくいけば、これはあなたが探しているものです/理にかなっています.

于 2013-08-26T22:24:27.697 に答える