1

こんにちは、私はMVC Razorアプリケーションをeカタログとして持っており、ドロップダウンリストを使用してDBからデータをバインドしましたが、DDlは3つのカテゴリ「x、Y、Z」があるかのようにDBから同じ値をバインドし、 DDLは同様の値を返しました「Z」 ,Z , Z ".最後の値は "y" であるため。また、ユーザーがDDLからアイテムを選択したときに、選択した値「ID」を DB に挿入しようとしましたが、失敗し、誤った選択値が返されました。

 public class CategoryController : Controller
{
    private AndriodContext db = new AndriodContext();
    List<SelectListItem> items = new List<SelectListItem>();
    List<string> category = new List<string>();
    SelectListItem s = new SelectListItem();

    //
    // GET: /Category/

    public ActionResult Index()
    {


        var x = db.Categories.Where(y => y.Active == true).ToList();



        return View(x);

    }



    public ActionResult Create()
    {
        var data = db.Categories.ToList().Distinct();
        List<string> x = new List<string>();

        foreach (var t in data)
        {

            s.Text = t.Name;
            s.Value = t.Cat_ID.ToString();

            items.Add(s);

        }

        ViewBag.Parent = items;
        return View();
    }

    //
    // POST: /Category/Create

    [HttpPost]
    public ActionResult Create(Category category, IEnumerable<HttpPostedFileBase> files)
    {


        var data = db.Categories.ToList().Distinct();
        List<SelectListItem> items = new List<SelectListItem>();
        foreach (var t in data)
        {
            SelectListItem s = new SelectListItem();
            s.Text = t.Name;
            s.Value = t.Cat_ID.ToString();
            items.Add(s);
            if (s.Selected)
            { category.Parent_ID = int.Parse(s.Value); }
        }


        db.Categories.Add(category);
        db.SaveChanges();

        return RedirectToAction("Index");
    }


}

@using (Html.BeginForm("Create", "Category", FormMethod.Post, new { enctype = "multipart/form-data", @data_ajax = "false" })) { @Html.ValidationSummary(true)

<fieldset>
    <legend></legend>

    <div class="editor-field create-Bt3">

        @Html.DropDownList("Parent", new SelectList(ViewBag.Parent, "Value", "Text"), "- Select Parent -")
    </div>

    <div>
        <p class="create-Bt ">
            <input type="submit" value="Create" />
        </p>
    </div>
    <br />
    <br />
    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>
</fieldset>

}

4

2 に答える 2

0

ViewBagの代わりにモデルを使用してドロップダウンリストをバインドするためのベストプラクティス。

モデルを使用したくない場合は、1つのトリックを実行できます。ビューページに非表示のfield(<input type="hidden" name="hdnParent" id="hdnParentId" />)を配置し、:を使用して単純なjqueryでdropdownlisの選択された値を計算します $("#Parent").val();

ドロップダウンリストを作成します:

@Html.DropDownList("Parent", new SelectList(ViewBag.Parent, "Value", "Text"), "- Select Parent -",new{ id="Parent" });

その後、コントローラーのHTTPPOSTで文字列パラメーターを取得します。

[HttpPost]
public ActionResult Create(string hdnParent) //hdnParent is the name of dropdownlist
{
    //now you can get the seleced value from "hdnParent".
    //do the stuffs
    return View();
}
于 2013-03-11T08:56:03.550 に答える
0

ビューページにjquery 1.7.1.min.js(DOM) をインポートする必要があります。リリース/ )。次に、ボタンをクリックします ( <input type="submit" value="Create" onclick="GetDropDownValue();"/>) :

JavaScript関数を書きました:

 <script type="text/javascript" language="javascript"> 
  function GetDropDownValue()
   {
     $("#hdnParentId").val($("#Parent").val());
   }
</script>
于 2013-03-11T09:32:43.140 に答える