0

以下はビューです:

<%@ Page Title="" Language="C#" 
         MasterPageFile="~/Views/Shared/Site.Master" 
         Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.Index>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Contact
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <% using (Html.BeginForm())
    {%>
         <%=Html.DropDownListFor(x => x.SelectedFavColor, Model.DropDownItems)%>
         <%= Html.ValidationMessageFor(x=> x.SelectedFavColor) %>
         <input type="submit" value="submit" />
    <%} %>
</asp:Content>

以下はモデルです。

namespace MvcApplication1.Models
{
    public class Index
    {
        [Range(0, 1000, ErrorMessage = "hello")]
        public int SelectedFavColor { get; set; }

        public IEnumerable<SelectListItem> DropDownItems { get; set; }
    }

    public class Colors
    {
        public int ColorID { get; set; }
        public string ColorName { get; set; }
    }
}

ビューでいくつかのドロップダウン値を渡しています。以下はコントローラーのアクションです。

public ActionResult Contact()
{
    List<MvcApplication1.Models.Colors> l = new List<Models.Colors>();
    l.Add(new Models.Colors { ColorName = "-1", ColorID = -1 });
    l.Add(new Models.Colors { ColorName = "a", ColorID = 0 });
    l.Add(new Models.Colors { ColorName = "b", ColorID = 2 });
    l.Add(new Models.Colors { ColorName = "c", ColorID = 3 });
    l.Add(new Models.Colors { ColorName = "d", ColorID = 4 });
    l.Add(new Models.Colors { ColorName = "e", ColorID = 4 });
    l.Add(new Models.Colors { ColorName = "f", ColorID = 4 });

    var model = new MvcApplication1.Models.Index
    {
        DropDownItems = l.Select(i => new SelectListItem 
                { 
                      Text = i.ColorName, 
                      Value = i.ColorID.ToString() 
                })
    };
    ViewData["records"] = model.DropDownItems;
    return View(model);
}

[HttpPost]
public ActionResult Contact(Index posted, FormCollection collection)
{
    posted.SelectedFavColor = Convert.ToInt16(collection["SelectedFavColor"]);
    return View(posted);
}

POST アクションで DropDown 値が Null になるのはなぜですか?

4

2 に答える 2

0

それDropDownItemsはあなたの形で編集されてnullいないからです。POSTこれでドロップダウンメニューを作成しているだけです:Html.DropDownListFor(x => x.SelectedFavColor, Model.DropDownItems)、これはコレクションを投稿するのに十分ではありません。

ただし、コレクションの投稿はかなり注意が必要です。しかし、あなたはこれを調べることができます。

最後にもう1つ、コレクションは既に(に渡されているため)あるため、技術的には、サーバーに戻すView必要はありません。POST

于 2013-01-16T20:37:01.960 に答える
0

DropDown の値が null である単純な理由は、フォームと共に送信 (POST) されていないためです (Firebug Firefox 拡張機能で簡単に確認できます)。これらの値を表示するには、ドロップダウン リストの値を再度収集 (再設定) する必要があります。

提案:

POST の直後にビューを返さないでください。ASP-MVC アプリの典型的なパターンは Post-Redirect-Get です。フォームの不必要な再投稿を避けるのに役立ちます (例: ブラウザの更新ボタン) -なぜ PRG を使用する必要があるのですか?

于 2013-01-16T21:40:13.737 に答える