Html.DropDownList 剃须刀

Html.DropDownList razor

我是 MVC 和 C# 的新手,很难使用下拉列表。

我想要完成的是使用保留设置的对象初始化我的页面。
(我从 XML 文件中读取设置)。

这是我的

public class StoreSettings  
{  
    public String BackSrs2Path { get; set; }  
    public int NoLines { get; set; }  
    public String Requesturl { get; set; }  
}  

public class Store  
{  
    public String StoreId { get; set; }  
    public String Address { get; set; }  
    public StoreSettings StoreSettings { get; set; }  
}  

我的视图页面的模型是商店列表

@model System.Collections.Generic.List<Control2.Models.Store>  
@{     
List<SelectListItem> selectList = new List<SelectListItem>();  
foreach (var Store in Model)  
{  
SelectListItem i = new SelectListItem();  
i.Text = Store.StoreId;  
i.Value = Store.StoreId;  
selectList.Add(i);  
}  
 }  
 @using (Html.BeginForm())  
{  
 SelectList list = new SelectList(selectList, "Value", "Text");  
 @Html.DropDownList("ddl", list, "select store", new { onchange = "this.form.submit();" });  
  }  
  } 

通过阅读此处的示例设法从我的模型和回发中填充下拉列表
但现在我只需要从列表中获取选定的对象并将其设置应用到页面以显示它等消息 "you ve selected Store"+Storeid(从下拉列表中选择)

此外,这段代码是在我的 cshtml 页面中编写的,它不是最好的,但无法确定我应该如何使用 ViewModel 和下拉列表

是的,当我第一次开始研究 MVC 的 DropDownList 绑定机制时,我也遇到了问题。我想做的是向您建议以下内容:

创建Viewmodel并将整个view绑定到viewmodel...如下:

public class VMStore
{
    public VMStore()
    {
        ItemsInDropDown = new List<SelectListItem>(){
            new SelectListItem{ Text="SomeValue", Selected=false, Value="SomeUniqueId"}
        };

    }
        public String StoreId { get; set; }
        public String Address { get; set; }
        public StoreSettings StoreSettings { get; set; }
        public string SelectedValue { get; set; }
        public IEnumerable<SelectListItem> ItemsInDropDown { get; set; }
        public void Post()
        {
           //This method will have the user selected value...

        }

}

视图将像这样绑定字段:

    @model WebApplication1.ViewModels.VMStore

    @{
        ViewBag.Title = "GetStore";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }

    <h2>GetStore</h2>

    <div>
        <h4>VMStore</h4>
        <hr />
        <dl class="dl-horizontal">

            @Html.BeginForm(){
            <dt>Select Store</dt>

            <dd>@Html.DropDownListFor(p=>Model.SelectedValue, Model.ItemsInDropDown) </dd>

            <dd><button type="submit">Submit</button></dd>
            }        

        </dl>
    </div>

操作方法如下所示:

    public ActionResult GetStore()
    {
        return View();
    }
    [HttpPost]
    public ActionResult GetStore(ViewModels.VMStore userdata) {
        if (ModelState.IsValid)
        {
            userdata.Post();
        }
        return View(userdata);

    }