ViewModel空列表,发布时为空对象 [英] ViewModel Empty list and null object on post
问题描述
我正在尝试使用viewmodels进行第一次冒险,但是遇到一个问题,这是我的view model和这些模型:
I'm trying my first adventure using viewmodels, but I got a problem, this is my view model and the models:
ViewModel:
public class ProfessionalDashboard
{
public List<JobOffertModel> AcceptedJobOfferts { get; set; }
public List<JobOffertModel> NotAcceptedJobOfferts { get; set; }
public ProfessionalModel Professional { get; set; }
}
型号:
public class JobOffertModel
{
[Key]
public int Id { get; set; }
public ProfessionalModel Professional { get; set; }
[Required]
public string Description { get; set; }
[Required]
[DefaultValue(false)]
public bool Accepted { get; set; }
[Required]
[DefaultValue(true)]
public bool Active { get; set; }
public ICollection<SkillModel> Skills { get; set; }
[Required]
[Column(TypeName = "DateTime2")]
public DateTime JobDate { get; set; }
public virtual CustomerModel Customer { get; set; }
}
然后...
public class ProfessionalModel
{
[Key]
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
[Column(TypeName = "DateTime2")]
public DateTime BirthDate { get; set; }
public int PhoneNumber { get; set; }
public string Profession { get; set; }
public UserAddressModel UserAddress { get; set; }
[Required]
public UserAccountModel UserAccount { get; set; }
public ICollection<SkillModel> Skills { get; set; }
public ProfessionalModel() {}
}
这是我的观点:
@model TCCApplication.ViewModels.ProfessionalDashboard
@{
ViewBag.Title = "Dashboard";
}
<div class="row">
<div class="col-md-5">
<h2>Minhas tarefas</h2>
@for (int i = 0; i < Model.AcceptedJobOfferts.Count; i++)
{
@Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Id)
<div class="row">
<div class="col-md-3">
<label>Oferta: </label>
@Html.DisplayFor(itemModel => Model.AcceptedJobOfferts[i].Description)
</div>
@*<div class="col-md-2">
<label>Aceito</label>
@Html.DisplayFor(itemModel => Model.AcceptedJobOfferts[i].Accepted)
</div>*@
<div class="col-md-5">
<label>Data do trabalho</label>
@Html.DisplayFor(itemModel => Model.AcceptedJobOfferts[i].JobDate)
</div>
@Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Professional.Id)
@Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Professional.Name)
@Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Professional.Skills)
@Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Professional.BirthDate)
@Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].JobDate)
@Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Active)
@Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Description)
@Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Accepted)
</div>
}
</div>
<div class="col-md-7">
@using (Html.BeginForm("AcceptJobOfferts","Professional")){
for (int i = 0; i < Model.NotAcceptedJobOfferts.Count; i++)
{
@Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Professional)
@Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Professional.Id)
@Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Professional.Name)
@Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Professional.Skills)
@Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Professional.BirthDate)
@Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].JobDate)
@Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Active)
@Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Description)
@Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Accepted)
@Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts)
<h2>Ofertas de trabalho indicadas</h2>
@Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Id)
<div class="row">
<div class="col-md-3">
<label>Oferta: </label>
@Html.DisplayFor(itemModel => Model.NotAcceptedJobOfferts[i].Description)
</div>
<div class="col-md-2">
<label>Aceito</label>
@Html.EditorFor(itemModel => Model.NotAcceptedJobOfferts[i].Accepted)
</div>
<div class="col-md-5">
<label>Data do trabalho</label>
@Html.DisplayFor(itemModel => Model.NotAcceptedJobOfferts[i].JobDate)
</div>
</div>
}
<div>
<input type="submit" value="Aceitar Ofertas" /> <!-- This is the post button -->
</div>
}
</div>
</div>
<div class="row" style="height:50px">
</div>
<div class="row">
<div class="col-md-12 text-center">
<div>
<label>Cliente: </label>
@Model.Professional.Name
</div>
<div>
<label>Data de nascimento: </label>
@Model.Professional.BirthDate
</div>
<div>
<label>Telefone: </label>
@Model.Professional.PhoneNumber
</div>
<div>
<label>Usuário: </label>
@Model.Professional.UserAccount.Username
</div>
<div>
<label>Profissão: </label>
@Model.Professional.Profession
</div>
<div>
<label>Bairro: </label>
@Model.Professional.UserAddress.Neighborhood
</div>
<p class="div-to-btn">
@Html.ActionLink("Alterar informações", "Edit", new { id = @Model.Professional.Id })
</p>
</div>
</div>
这是必须接收post方法的方法:
And this is the method who must to receive the post method:
[HttpPost]
public ActionResult AcceptJobOfferts(ProfessionalDashboard profDash)
{
initBusinessObjects();
//foreach (var jo in jobOffertModel)
//{
// jobOffertBusiness.Update(jo);
//}
return RedirectToAction("ViewMyTasks", new { professionalId = profDash.Professional.Id});
}
我的参数profDash接收到一个空的Professional对象,一个空的List和另一个具有零itens的
My parameter profDash receives a null Professional Object, a null List and another with zero itens.
我如何使它工作?
推荐答案
我在您的表单中看到的都是 Model.NotAcceptedJobOfferts
.如果要维护数据,则需要将其添加为表单中的隐藏输入.向用户呈现视图后,您的模型将丢失,唯一可用的数据就是页面上呈现的数据.
All I see in your form are Model.NotAcceptedJobOfferts
. If you want to maintain your data you need to add it as a hidden input in your form. Once the view is rendered to the user, your model is lost, the only data available is what has been rendered on the page.
这篇关于ViewModel空列表,发布时为空对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!