保存一个Html.DropDownList

时间:2018-06-27 16:37:50

标签: c# asp.net asp.net-core

如何将选定的选项保存到数据库中,现在它将保存所有数据,但我需要的是ProfileText ... 我想我需要添加一个asp,但是我不知道该在哪里诚实,或者如果这是另一种方式,请告诉我。 这是我的观点:

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

这是我将列表发送到视图的方式:

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 :(得分:1)

在您看来,将代码更改为:

<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);构造函数。

进一步阅读 here

答案 1 :(得分:1)

如我所见,您没有填充下拉列表。我认为最好是具有一个可以选择的值(在SelectList或字符串列表中)和一个将在模型中保存选定值并使用DropDownListFor的变量。语法为:

@ Html.DropDownListFor(model => model.ProfileText,新的SelectList(Model.ProfileList,“名称”),新的{(此处html属性)@class =“ form-control”})

这样做之后,您将在发布模型时获得选定的值