2011-09-13 8 views
7

यह मेरे लिए काम करता है लेकिन मैं html.dropdownlist का उपयोग करके वही काम कैसे करूं?html.dropdownlist एमवीसी 3 भ्रम

ध्यान दें कि पास किया गया मान उपयोगकर्ता को दिखाया गया मान नहीं है।

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

तो आप एक नियंत्रक कार्रवाई है कि कुछ डेटा स्रोत या कुछ और से इस दृश्य मॉडल भरता बारे में:

@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

और एक अन्य आलेख जिसे आप देखना चाहते हैं टीपी: //www.c-sharpcorner.com/UploadFile/b19d5a/7474/ –

उत्तर

13

हमेशा की तरह एक ASP.NET MVC आवेदन में आप एक दृश्य मॉडल को परिभाषित करने से शुरू

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" 
    ) 
) 
के

पाठ्यक्रम ऐसी अश्लीलता ऐसी चीज नहीं है जिसे मैं कभी भी एक विचार में लिखने की सिफारिश करता हूं और मैं अपने सबसे बुरे दुश्मनों को भी अनुशंसा नहीं करता।

निष्कर्ष: एएसपी.नेट एमवीसी अनुप्रयोग में आपको हमेशा दृश्य मॉडल का उपयोग करना चाहिए और दृढ़ता से टाइप किए गए सहायकों के साथ दृढ़ता से टाइप किए गए विचार (मेरे उत्तर का पहला भाग देखें)।

+0

कभी भी ध्यान न दें http://geekswithblogs.net/dotNETvinz/archive/2011/06/03/asp.net-mvc-3-creating-a इस साइट को देखने के बाद -समूह-साइन-अप-फॉर्म.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; } 
    } 

सी # कोड

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

और अंत में एचटीएमएल

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