質問

I'm having a problem with a null list of objects when I try send from view to controller, the jobOffertModel parameter is null

Here is my controller method: (I know it doesn't nothing, but I was testing the parameters)

[HttpPost]
public ActionResult AcceptJobOfferts(IEnumerable<JobOffertModel> jobOffertModel)
{
    initBusinessObjects();

    return View();
}

And Here is my View:

@model IEnumerable<TCCApplication.Models.JobOffertModel>

@{
    ViewBag.Title = "Minhas ofertas de trabalho";
}

<h2>@ViewBag.Title</h2>


@using (Html.BeginForm("AcceptJobOfferts","Professional")){

<div class="row">
    <div class="col-md-9">
        @foreach (var item in Model)
        {
            <div class="row">
                <div class="col-md-2">
                    <label>Oferta: </label>
                    @Html.DisplayFor(itemModel => item.Description)
                </div>

                @if (item.Acepted)
                {
                    <div class="col-md-2">
                        <label>Aceitar?</label>
                        @Html.DisplayFor(itemModel => item.Acepted)
                    </div>
                }
                else
                { 
                    <div class="col-md-2">
                        <label>Aceitar?</label>
                        @Html.EditorFor(itemModel => item.Acepted)
                    </div>
                }
                <div class="col-md-2">
                    <label>Ativa</label>
                    @Html.DisplayFor(itemModel => item.Active)
                </div>
                <div class="col-md-3">
                    <label>Data do trabalho</label>
                    @Html.DisplayFor(itemModel => item.JobDate)
                </div>
            </div>
        }
    </div>

    <div class="col-md-2">
        <input type="submit" value="Aceitar ofertas de trabalho"/>
    </div>

</div>

}

The user goes to view using this method:

public ActionResult ViewMyJobOfferts(int professionalId)
{
    initBusinessObjects();

    var professionalJobOfferts = jobOffertBusiness.GetJobOffertsByProfessional(professionalId);

    return View(professionalJobOfferts);
}
役に立ちましたか?

解決

Changes what I have done -

  1. Convert IEnumerable to List() with variable called modelList.
  2. Used For Loop to display all property values.
  3. Used hidden fields to persist only display element properties for POST operation.
  4. Changed parameter name of POST Controller Action to modelList.

You got to have your view something like this -

@model IEnumerable<TCCApplication.Models.JobOffertModel>

@{
    ViewBag.Title = "Minhas ofertas de trabalho";
}

<h2>@ViewBag.Title</h2>


@using (Html.BeginForm("AcceptJobOfferts","Professional", FormMethod.Post)){
var modelList = Model.ToList();
<div class="row">
    <div class="col-md-9">
        for (int i = 0; i < modelList.Count; i++)
        {
            <div class="row">
                <div class="col-md-2">
                    <label>Oferta: </label>
                    @Html.DisplayFor(itemModel => modelList[i].Description)
                    @Html.HiddenFor(itemModel => modelList[i].Description)
                </div>

                @if (modelList[i].Acepted)
                {
                    <div class="col-md-2">
                        <label>Aceitar?</label>
                        @Html.DisplayFor(itemModel =>  modelList[i].Acepted)
                        @Html.HiddenFor(itemModel =>  modelList[i].Acepted)
                    </div>
                }
                else
                { 
                    <div class="col-md-2">
                        <label>Aceitar?</label>
                        @Html.EditorFor(itemModel =>  modelList[i].Acepted)
                    </div>
                }
                <div class="col-md-2">
                    <label>Ativa</label>
                    @Html.DisplayFor(itemModel => modelList[i].Active)
                    @Html.HiddenFor(itemModel => modelList[i].Active)
                </div>
                <div class="col-md-3">
                    <label>Data do trabalho</label>
                    @Html.DisplayFor(itemModel =>  modelList[i].JobDate)
                    @Html.HiddenFor(itemModel =>  modelList[i].JobDate)
                </div>
            </div>
        }
    </div>

    <div class="col-md-2">
        <input type="submit" value="Aceitar ofertas de trabalho"/>
    </div>

</div>

}

And then your controller should be -

[HttpPost]
public ActionResult AcceptJobOfferts(IEnumerable<JobOffertModel> modelList)
{
    initBusinessObjects();

    return View();
}

他のヒント

Replace this line :

 @using (Html.BeginForm("AcceptJobOfferts","Professional")){

By:

 @using (Html.BeginForm("AcceptJobOfferts","Professional", FormMethod.Post)){
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top