如何通过MVC Razor将选定的值从DDL插入到DB中

时间:2013-03-11 08:22:12

标签: asp.net-mvc razor

  
    

嗨我有 MVC Razor 应用程序作为电子目录,我使用下拉列表绑定来自 DB 的数据,但 DDl 绑定来自 DB 的相同值,好像我有三个类别" x,Y,Z" DDL 返回了类似的值" Z,Z,Z"。因为它有最后一个值" y" 。我也尝试插入所选的值" ID"用户从 DDL 中选择项目时到数据库,但我无法返回错误的选定值。

  

 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(&#34; Create&#34;,&#34; Category&#34;,FormMethod.Post,new {enctype =&#34; multipart / form-data&#34;,@ data_ajax =&#34; false&#34;})) {     @ Html.ValidationSummary(真)

<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>

}

2 个答案:

答案 0 :(得分:0)

使用模型绑定下拉列表而不是ViewBag的最佳做法。

如果你不想使用模型,你可以做一个技巧。 您在视图页面中放置了一个隐藏字段(<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();
}

答案 1 :(得分:0)

您需要在viewpage中导入jquery 1.7.1.min.js(DOM): 从jquery网站(http://blog.jquery.com/2011/11/21/jquery-1-7-1-released/)获取jquery DOM。 然后点击按钮(<input type="submit" value="Create" onclick="GetDropDownValue();"/>):

写了一个javascript函数:

 <script type="text/javascript" language="javascript"> 
  function GetDropDownValue()
   {
     $("#hdnParentId").val($("#Parent").val());
   }
</script>