html.dropdownlist MVC3 путаница - PullRequest
       1

html.dropdownlist MVC3 путаница

7 голосов
/ 14 сентября 2011

Это работает для меня, но как мне сделать то же самое, используя html.dropdownlist?

Обратите внимание, что переданное значение не является значением, которое отображается пользователю.

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

Ответы [ 2 ]

13 голосов
/ 14 сентября 2011

Как всегда в приложении ASP.NET MVC, вы начинаете с определения модели представления:

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 голосов
/ 01 декабря 2011

Вот полный пример

  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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...