0

mvcイントラネットにプロセスを作成するためのビューがあります。

そのビューでは、データを入力する必要があるテーブルがあります。

これが私の見解です

@model TestingTool.ViewModels.ProcessModel
@{
    ViewBag.Title = "Create";
}
<h2>
    Create</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Process</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Code)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Code)
            @Html.ValidationMessageFor(model => model.Code)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Description)
        </div>
        <div class="editor-field">
            @Html.TextAreaFor(model => model.Description)
            @Html.ValidationMessageFor(model => model.Description)
        </div>
        <table>
            <thead>
                <tr>
                    <th>
                        Region
                    </th>
                    <th>
                        Owner
                    </th>
                </tr>
            </thead>
            <tbody>
               @if (Model != null)
               {
                   foreach (var item in ViewBag.Regions)
                   {
                       <tr>

                           <td>
                             @Html.DisplayTextFor(i => item.Name)
                           </td>

                           <td>
                               @Html.DropDownListFor(i => item.User, new SelectList(item.User, "Id", "Name"))
                           </td>

                       </tr>
                   }
               }
            </tbody>
        </table>
        <p>
            <input type="button" value="Create" />
        </p>
    </fieldset>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>

そしてこれは私のコントローラーです

//
        // GET: /Process/Create

        public ActionResult Create()
        {
            Collection<RegionModel> region = new Collection<RegionModel>();

            foreach (var regions in _db.Regions)
            {
                if (regions.Name != "Europe")
                {
                    RegionModel iRegion = new RegionModel
                        {
                            Name = regions.Name,
                            Id = regions.Id,
                            User = new Collection<UserModel>()
                        };

                    foreach (User user in _db.Users)
                    {
                        UserModel iUser = new UserModel { Id = user.Id, Name = user.Name };

                        iRegion.User.Add(iUser);
                    }

                    region.Add(iRegion);
                }
            }

            ViewBag.Regions = region;

            return View();
        }

ViewBagを繰り返すことは可能だと思いましたが、このエラーが発生します

An expression tree may not contain a dynamic operation - mvc

そして、私が疑問に思っていたもう1つのことは、モデルにデータを事前入力させることが可能かどうかということです。

4

1 に答える 1

1

モデルデータにVIEWBAGを使用しないでください。そのためのスポットを持つviewmodel属性を作成します。

class MyViewModel {
  public Collection<RegionModel> regions {get;set;}
  ...snip...
}

次に、コントローラーで:

var viewmodel = new MyViewModel();
viewmodel.regions = region;

return View(viewmodel);

編集: すでにビューモデルを持っているようです:@model TestingTool.ViewModels.ProcessModel リージョンのビューモデルにプロパティを追加できますか?

于 2012-11-21T20:09:13.827 に答える