13

ASP.Net MVC Beta 5 を使用していたサイトを ASP.Net MVC 1.0 にアップグレードしました。ドロップダウン リストで選択したアイテムに問題があります。

次の人に同様の質問があります(ASP.NET MVC RCのHtml.DropDownList(更新)アイテムを事前に選択していません)が、答えはありません(バグである可能性があることを除いて)

私のコントローラーメソッドは次のようになります。

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult View(Guid id)
{
    IntegrationLogic logic = new IntegrationLogic(new IntegrationLinq());
    CompanyLogic companyLogic = new CompanyLogic(new CompanyLinq());
    IntegrationContainer container = new IntegrationContainer();

    container.Sources = logic.GetImportSource(id);
    container.Companies = companyLogic.GetCompanies(); // Returns a IList<company>
    container.SourceActions = logic.GetAllSourceActions(); // Returns an IList<SourceAction>
    container.SinkActions = logic.GetAllSinkActions();
    container.SuccessActions = logic.GetAllSuccessActions();
    container.FailureActions = logic.GetAllFailureActions();
    container.Actions = logic.GetAllActions();
    container.Watchers = logic.GetAllWatcherActions();
    container.ChainActions = logic.GetAllChainActions();

    return View("View", container);
 }

ビューは、次のようにモデルに対して強く型付けされています

public partial class View : ViewPage<IntegrationContainer> {}

ビュー テンプレートの問題領域は次のとおりです。

  <label for="Companies">Company: </label><%=Html.DropDownList("Companies",
                                                new SelectList(ViewData.Model.Companies, "id", "name", item.CompanyID))%>

ドロップダウン リストを作成していますが、選択したアイテムが実際に選択されることはありません。これが問題です。"item.CompanyID" は Guid、"id" は Guid、"name" は ViewData.Model.Companies インスタンスに保持されている IList で提供される会社オブジェクトの文字列です。

これは実際にバグですか?-なぜこれがまだ ASP.Net MVC に存在するのか理解するのは難しいと思います...それが私がやったことであるなら、私は完全に幸せです.

とにかく、提案された回避策は何ですか?

ありがとう

4

1 に答える 1

21

Html.DropDownList を介したコントロールの名前がコレクション オブジェクトと同じ名前である場合、ASP.Net MVC で問題が発生することが判明しました。

したがって、次のコードを変更すると:

<label for="Companies">Company: </label><%=Html.DropDownList("Companies",
                                                new SelectList(ViewData.Model.Companies, "id", "name", item.CompanyID))%>

に:

<label for="Companies">Company: </label><%=Html.DropDownList("company",
                                                new SelectList(ViewData.Model.Companies, "id", "name", item.CompanyID))%>

すべてが機能するようになりました。これは、モデルのコレクションの名前が Model.Companies.... bonkers だったためです...また、コントロールの名前の大文字と小文字を「Companies」から「companys」に変更しても機能しないことに注意してください (これにより、意味があると思います)。

モデルを変更することもできますが、そのほとんどは Linq-to-SQL を使用して構築されているため、Html 要素の名前を変更する方が簡単だと思います。

于 2009-07-31T08:04:28.897 に答える