2011-09-13 49 views
7

Điều này phù hợp với tôi nhưng làm cách nào để thực hiện điều tương tự bằng cách sử dụng html.dropdownlist?html.dropdownlist Sự nhầm lẫn MVC3

Lưu ý rằng giá trị được chuyển không phải là giá trị được hiển thị cho người dùng.

@model IEnumerable<MVR.Models.ViewIndividual> 

<h2>Level1</h2>  
<select> 
     @foreach (var item in Model) { 
     <option value="@item.Case_Number">@item.Patient_Lastname , 
              @item.Patient_Firstname 
     </option> 
} 
</select> 
+0

Xem ví dụ này http://stackoverflow.com/questions/7143811/ get-id-and-type-from-html-dropdownlist-to-controller/7143991 # 7143991 –

+0

Và một bài viết khác bạn có thể muốn xem ht tp: //www.c-sharpcorner.com/UploadFile/b19d5a/7474/ –

Trả lời

13

Như mọi khi trong một ứng dụng ASP.NET MVC bạn bắt đầu bằng cách định nghĩa một mô hình điểm:

public class MyViewModel 
{ 
    public string SelectedIndividual { get; set; } 
    public SelectList Individuals { get; set; } 
} 

sau đó bạn viết một controller action mà populates mô hình quan điểm này từ một số nguồn dữ liệu hoặc một cái gì đó:

public ActionResult Index() 
{ 
    // TODO : fetch those from your repository 
    var values = new[] 
    { 
     new { Value = "1", Text = "item 1" }, 
     new { Value = "2", Text = "item 2" }, 
     new { Value = "3", Text = "item 3" }, 
    }; 

    var model = new MyViewModel 
    { 
     Individuals = new SelectList(values, "Value", "Text") 
    }; 
    return View(model); 
} 

và cuối cùng bạn có một cái nhìn mạnh mẽ gõ sử dụng người giúp đỡ mạnh mẽ gõ:

@model MyViewModel 
@Html.DropDownListFor(
    x => x.SelectedIndividual, 
    Model.Individuals 
) 

này đang được nói, bởi vì tôi thấy rằng bạn đang không sử dụng bất kỳ mô hình điểm trong ứng dụng của bạn, bạn luôn có thể thử sự xấu xí sau (không được khuyến khích, thực hiện điều này có nguy cơ của riêng bạn):

@model IEnumerable<MVR.Models.ViewIndividual> 

<h2>Level1</h2> 
@Html.DropDownList(
    "SelectedIndividual", 
    new SelectList(
     Model.Select(
      x => new { 
       Value = x.Case_Number, 
       Text = string.Format(
        "{0}, {1}", 
        x.Patient_Lastname, 
        x.Patient_Firstname 
       ) 
      } 
     ), 
     "Value", 
     "Text" 
    ) 
) 

Trong số khóa học khiêu dâm như vậy không phải là một cái gì đó mà tôi muốn giới thiệu bao giờ viết trong một cái nhìn và tôi sẽ không khuyên bạn nên ngay cả với kẻ thù tồi tệ nhất của tôi.

Kết luận: Trong một ứng dụng ASP.NET MVC, bạn nên luôn sử dụng các kiểu xem và các kiểu gõ mạnh mẽ với những người trợ giúp gõ mạnh mẽ (xem phần đầu của câu trả lời của tôi).

+0

Đừng bận tâm http://geekswithblogs.net/dotNETvinz/archive/2011/06/03/asp.net-mvc-3-creating-a -simple-sign-up-form.aspx sau khi xem trang này tôi biết ý bạn là gì. – hidden

0

Dưới đây là toàn bộ mã ví dụ

public class PageModel 
    { 
     [Display(Name = "Page ID")] 
     public Guid ID { get; set; } 
     [Display(Name = "Page Type ID")] 
     public Guid PageTypeID { get; set; } 
     [Display(Name = "Title")] 
     public string Title { get; set; } 
     [Display(Name = "Page Type Name")] 
     public string PageTypeName { get; set; } 
     [Display(Name = "Html Content")] 
     public string HtmlContent { get; set; } 
     public SelectList PageTypeList { get; set; } 
    } 

C#

public ActionResult Edit(Guid id) 
{ 
    var model = db.Pages.Where(p => p.ID == id).FirstOrDefault(); 


    var typeList = new SelectList(db.PageTypes.OrderBy(s => s.Name).ToList(), "ID", "Name"); 
    var viewModel = new PageModel { PageTypeList = typeList }; 
    viewModel.HtmlContent = model.HtmlContent; 
    viewModel.ID = model.ID; 
    viewModel.PageTypeID = Guid.Parse(model.PageTypeID.ToString()); 
    viewModel.Title = model.Title; 


    return View(viewModel); 
} 

[HttpPost] 
[ValidateInput(false)] 
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(PageModel page) 
{ 
    if (ModelState.IsValid) 
    { 
     var model = db.Pages.Where(p => p.ID == page.ID).FirstOrDefault(); 
     model.Title = page.Title; 
     model.HtmlContent = page.HtmlContent; 
     model.PageTypeID = page.PageTypeID; 

     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(page); 
} 

và cuối cùng html

@model competestreet.com.Models.PageModel 
@{ 
    ViewBag.Title = "Edit"; 
    Layout = "~/Views/Shared/_LayoutCMS.cshtml"; 
} 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#HtmlContent').ckeditor(); 
    }); 
</script> 
<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> 
<script src="@Url.Content("~/Scripts/ckeditor/ckeditor.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/ckeditor/adapters/jquery.js")" type="text/javascript"></script> 
<h2 class="title"> 
    <span class="text-cms">CM<span>S</span></span></h2> 
<div class="box"> 
    <div class="t"> 
    </div> 
    <div class="c"> 
     <div class="content"> 
      <div class="main-holder"> 
       <div id="sidebar"> 
        <ul> 
         <li><a href="@Url.Content("~/Cms/Index")">Home</a></li> 
         <li><a href="@Url.Content("~/Pages/Index")">Pages</a></li> 
        </ul> 
       </div> 
       <div id="content" style="min-height: 500px;"> 
        @using (Html.BeginForm()) 
        { 
         @Html.ValidationSummary(true) 
         <fieldset> 
          <legend>Page Type - @Html.DropDownListFor(x => x.PageTypeID, Model.PageTypeList) 
          @Html.ValidationMessageFor(model => model.PageTypeID)</legend> 
          <div class="editor-label"> 
           @Html.LabelFor(model => model.Title) 
          </div> 
          <div class="editor-field"> 
           @Html.EditorFor(model => model.Title, new { @class = "text-box" }) 
           @Html.ValidationMessageFor(model => model.Title) 
          </div> 
          <div class="clear"> 
          </div> 
          <div class="editor-label"> 
           @Html.LabelFor(model => model.HtmlContent) 
          </div> 
          <div class="editor-field"> 
           @Html.TextAreaFor(model => model.HtmlContent, new { @name = "Editor1", @class = "Editor1" }) 
           @Html.ValidationMessageFor(model => model.HtmlContent) 
          </div> 
          <div class="clear"> 
          </div> 


          <p> 
           <input type="submit" value="Save" class="input-btn" /> 
          </p> 
         </fieldset> 
        } 
        <div> 
         @Html.ActionLink("Back to List", "Index") 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
    <div class="b"> 
    </div> 
</div>