Сохранение Html.DropDownList - PullRequest
0 голосов
/ 27 июня 2018

Как я могу сохранить в моей БД эту выбранную опцию, сейчас она сохраняет все данные, кроме ProfileText, который мне нужен ... Я думаю, что мне нужно добавить asp-for, но я не знаю, где быть честным, или если это другой способ, пожалуйста, скажите мне. Вот мой взгляд:

@model HCCBPOHR.Data.Candidate
@*@model HCCBPOHR.DomainModel.CandidateModel*@
 @*@model HCCBPOHR.Services.CandidateService.PostBoth*@
@{
ViewData["Title"] = "CandidateCreate";
}
<h2>CandidateCreate</h2>
<h4>Candidate</h4>
<hr />
<div class="row">
<div class="col-md-4">
    <form method="post" enctype="multipart/form-data" asp-action="CandidateCreate">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="Name" class="control-label"></label>
            <input asp-for="Name" class="form-control" />
            <span asp-validation-for="Name" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Number" class="control-label"></label>
            <input asp-for="Number" class="form-control" maxlength="9" />
            <span asp-validation-for="Number" class="text-danger"></span>
        </div>
        <div class="form-group">
            @Html.DropDownList("ProfileText", "Select Profile")
        </div>

        <div class="form-group">
            <label asp-for="CV" type="file" class="control-label"></label>
            <input asp-for="CV" type="file" class="form-control" />
        </div>
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-default" onclick="this.disabled=true;this.form.submit();" />
        </div>
    </form>
</div>
</div>
<div>
<a asp-action="Index">Back to List</a>
</div>

Вот моя модель:

public class Candidate : BaseEntity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Number { get; set; }
    public string ProfileText { get; set; }
    public Byte[] CV { get; set; }
    public string CVNAME { get; set; }
    public List<Profile> ProfileList { get; set; }
}

Вот так я отправляю Список в View:

public IActionResult CandidateCreate(int postId)
    {

        using (var applicationcontext = new ApplicationContext())
        {
            IEnumerable<SelectListItem> items = applicationcontext.Profile.Select(c => new SelectListItem{Value = c.ProfileText,Text = c.ProfileText});
            ViewBag.ProfileText = items.ToList();
            return View();
        }
    }

Ошибка, которая у меня сейчас есть,

NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Как я вижу, вы не заполняете выпадающий список. Я думаю, что лучше иметь значения, которые можно выбрать (в списке выбора или списке строк), и переменную, которая будет содержать выбранное значение в вашей модели и использовать DropDownListFor. синтаксис будет:

@Html.DropDownListFor (model => model.ProfileText, new SelectList (Model.ProfileList, "name"), new {(здесь атрибуты html) @class = "form-control"})

После этого вы получите выбранное значение при публикации модели

0 голосов
/ 27 июня 2018

На ваш взгляд измените код на:

<div class="form-group">
   <select asp-for="ProfileText" asp-items="@Model.ProfileList"></select>
</div>

Тогда в вашей модели у вас будет свойство, которое мы можем назвать ProfileText, которое затем отправит сообщение на сервер при отправке формы.

Измените вашу модель, введя новую опору следующим образом:

public SelectList ProfileList { get; set; }

Теперь в вашем действии вам нужно будет сделать:

var model = new Candidate();
...
model.ProfileList = new SelectList(YourProfileListFromDbOrSomeWhereElse);
return View(model);

Обратите внимание, что вы также можете использовать конструктор SelectList(IEnumerable, string dataValueField, string dataTextField), если хотите установить dataValueField и dataTextField. Я не знаю, как вы получаете ваш ProfileList и что в нем содержится, поэтому я и использовал только конструктор SelectList(IEnumerable items);.

Дальнейшее чтение здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...