0

そのデータをうまく渡すドロップダウンリストを作成しました。ただし、フォームを編集する場合、GET操作の古い値がフォームに入力されません。私はMVCを初めて使用するので、簡潔な例があれば素晴らしいでしょう。更新-私は何が起こっているのかを知っており、解決するのに助けが必要だと思います。ddlにはドロップダウンデータのみが含まれているため、編集ビューのモデルにドロップダウンデータのみを渡します。フォームのデータは私のコードの以下の変数モデルにありますが、ビューでddlとモデルを渡すにはどうすればよいですか?

コントローラーの私のコードはここにあります

public ActionResult Edit(int id)
        {
            var ddl = new Users();
            ddl.DropDowns = userRepository.Getddl("Departments").Select(c => new SelectListItem
            {
                Value = c.DropdownID.ToString(),
                Text = c.DropdownText
            });
                        var model = userRepository.GetUserId(id);
            return View(ddl);
        }

        [HttpPost]
        public ActionResult Edit(Models.Users users)
        {
            userRepository.UpdateUser(users);
            return RedirectToAction("Index");
        }

見る

@model Models.Users

@{
    ViewBag.Title = "Edit";
}

<h2>Edit</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)
    <div id="stylized" class="myform">
    <fieldset>
        <legend>User Account</legend>     

        <div class="editor-label">
            @Html.LabelFor(model => model.UserFullName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.UserFullName)
            @Html.ValidationMessageFor(model => model.UserFullName)
        </div>
       <br/>
        <div class="editor-label">
            @Html.LabelFor(model => model.UserName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.UserName)
            @Html.ValidationMessageFor(model => model.UserName)
        </div>
        <br/>
         <div class="editor-label">
            @Html.LabelFor(model => model.ProfileName)
        </div>
          <div class="editor-field">
       @Html.DropDownListFor(x=> x.DeptID,new SelectList(Model.DropDowns,"Value","Text"),"Select")      

        </div> 
4

6 に答える 6

1

私があなたの質問を正しく理解している場合、あなたの編集ビューにはユーザーデータが表示されていません。代わりに、それが「新しい」アクションであるかのように空白のフォームを表示していますか?

間違ったモデルをビューに渡していると思います-モデルを渡すべきですが、ddlを渡しています-(ddlは新しいユーザーです)。

ドロップダウンをビューバッグに渡すか、ユーザーとドロップダウンリストを含むビューモデルを作成することができます

于 2012-10-16T12:12:45.247 に答える
1

新しい(空Userの)ビューを渡します。代わりに、モデルをビューに渡します。

return View(model);
于 2012-10-16T12:09:35.827 に答える
1

ビューに間違ったオブジェクトを渡しています。Repositaryメソッドから取得したユーザーオブジェクトを渡します。メソッドがクラス GetUserIDのオブジェクトを返し、ユーザーオブジェクトにプロパティがあると仮定しますUserDropDowns

 public ActionResult Edit(int id)
 {
     var model = userRepository.GetUserId(id);
     model.DropDowns = userRepository.Getddl("Departments").
                                          Select(c => new SelectListItem
        {
            Value = c.DropdownID.ToString(),
            Text = c.DropdownText
        });                      
     return View(model);
 }
于 2012-10-16T12:15:37.117 に答える
1

モデルとDropDownListをビューに渡す必要があります。主要なオブジェクトはモデルである必要があります。これは、ビューの基になっているためです。ただし、DropDownListもビューに取り込む必要があるため、モデルにアタッチするか、ViewBagを介して追加することができます。

public ActionResult Edit(int id)
{
   var ddl = new Users();
   ddl.DropDowns = userRepository.Getddl("Departments").Select(c => new SelectListItem
   {
       Value = c.DropdownID.ToString(),
       Text = c.DropdownText
   });

   var model = userRepository.GetUserId(id);

   // When accessing this from the view, you will
   // call it by ViewBag.DepartmentsDropdown
   ViewBag.DepartmentsDropdown = dll;

   return View(model);
}
于 2012-10-16T12:16:54.213 に答える
0

作成します。UsersViewModelクラス、フィードドロップダウンへのSelectListなどのプロパティ、ユーザーのリスト、およびビューに渡したい他のすべてのデータを追加します。このクラスのビュー初期化インスタンスを返す前に、プロパティを設定してモデルとして渡します。

..
var model = new UsersViewModel
{
   Users = new SelectList(..),
   ...
}
return View(model);

次に、ビューで、そのViewModelからのすべてのオブジェクトを参照できます。

于 2012-10-16T12:20:47.437 に答える
0

わかりました、みんなの入力のおかげで私はそれを解決することができました。持っていたモデルを作り直したくなかった。データが表示されなかったのは、モデルを渡さなかったためです。したがって、ドロップダウン情報を保持するためにViewDataを作成する必要があります。後から考えると、このような問題に遭遇しないように、モデルにより多くの時間を費やす方がよいでしょう。みんなの助けがなければ、私はこれを手に入れることができなかったでしょう。

コントローラー内

ViewData["DepartmentDD"] = new SelectList(ddl.DropDowns, "Value", "Text");

ビューで

@ Html.DropDownListFor(model => model.DeptID、(SelectList)ViewData ["DepartmentDD"]、 "1つ選択してください")

于 2012-10-16T13:03:18.783 に答える