2011-09-13 9 views
7

これは私にとってはうまくいくが、同じことをどうすればhtml.dropdownlistを使って行うのだろうか?html.dropdownlist MVC3混乱

渡される値は、ユーザーに表示される値ではありません。

いつものようにASP.NET MVCアプリケーションでのビューモデルを定義することから始め
@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

http://stackoverflow.com/questions/7143811/この例を参照してくださいget-id-and-type-from-html-dropdownlist-to-controller/7143991#7143991 –

+0

また、別の記事でhtをチェックアウトすることもできますtp://www.c-sharpcorner.com/UploadFile/b19d5a/7474/ –

答えて

13

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

、あなたはいくつかのデータソースか何かから、このビューモデルを移入コントローラのアクションを記述します。

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); 
} 

そして最後に、あなたは強く型付けされたヘルパーを使用して強く型付けされたビューを持っている:

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

これは(推奨されません、ご自身の責任でこれを行う)私は、あなたのアプリケーション内の任意のビューモデルを使用していないことを見るので、あなたは常に次の醜さを試みることができる、言われている:の

@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" 
    ) 
) 

もちろんそのようなポルノは私が今までに書いたことを推薦するものではなく、私の最悪の敵にも勧めていません。

結論:ASP.NET MVCアプリケーションでは、常に強く型付けされたヘルパーでビューモデルと強く型付けされたビューを使用する必要があります(私の答えの最初の部分を参照)。ここ

+0

気にしないhttp://geekswithblogs.net/dotNETvinz/archive/2011/06/03/asp.net-mvc-3-creating-a -simple-sign-up-form.aspxこのサイトを見た後、私はあなたが何を意味するのか知っています。 – hidden

0

が満杯例で

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); 
} 

最後に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>