4

私はMVC4を使用していますが、通常はVisualStudioによってすべてのビューが作成されます。フィールドが1つしかないフォームが1つあり、作成フォームをインデックスビューに埋め込みたいだけです。

したがって、インデックスビューには次のようなものがあります@model IEnumerable<Models.LinkModel>

そのため、Modelコレクションを反復処理してアクセスします。

しかし、必要な作成アクションのフォームを埋め込もうとする@model Models.LinkModel と、Model.Nameからもアクセスされます。これを行う方法や別の変数名を使用する方法はありますか?

ここにいくつかの追加情報があります。

だから私はモデルを持っています。

public class LinkModel
{
   public string LinkUrl {get;set;}
}

CreateおよびIndexActionResultsを持つコントローラーがあります。

今インデックスビューで私は持っています

@model IEnumerable<Models.LinkModel>

@{
    ViewBag.Title = "Links";
}

すべてのリンクを一覧表示するために、すべての凝ったロジックを実行できます。

@foreach(link in Model)
{
    <p>link.LinkUrl<p>
}

ビューの作成にはこれがあります

@model Models.LinkModel // Note that it is just one item not IEnumerable

@{
    ViewBag.Title = "Add Link";
}

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)

    <fieldset class="editor-fieldset">
        <legend>LinkModel</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.LinkUrl)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.LinkUrl)
        </div>
       <p>
        <input type="submit" value="Add Link" />
       </p>
    </fieldset>
}

今では、1つのフィールドだけの作成フォームがあるのはかなりばかげているようです。このフォームをインデックスページに配置したいと思います。問題は、変数Modelを使用してオブジェクトにアクセスすることです。2つの別々のインスタンスを作成する方法があるかどうか、または異なる名前のModelオブジェクトにアクセスできる方法があるかどうかを知りたいと思いました。

4

1 に答える 1

4

作成用のアイテムのリストと1つの単一アイテムを含む複合モデルを作成します

public class  IndexModel {
   public LinkModel CreateModel {get; set;}
   public IEnumerable<LinkModel> Items {get; set;}
}


@model IndexModel
@using(Html.BeginForm("create")) {
   @Html.EditorFor(m => m.CreateModel.Name);
}
@foreach(var item in Model.Items) {
  @item.Name
}
于 2012-10-01T01:46:40.023 に答える