发送到控制器时丢失的值
本文关键字:控制器 | 更新日期: 2023-09-27 17:54:45
我想发送我的EmailFormModel,其中包含的压力列表,到控制器,我想用它做的东西。然而,我永远无法访问我的EmailFormModel在我的控制器中的值。我试图通过使用Sessions来克服这个问题,但它仍然不起作用。Ressurs列表包含多个Ressursbehov,但绝不会有超过一个EmailFormModel。
我的控制器
namespace WebApplication6.Controllers
{
public class AppController : Controller
{
const string SESSION_SAVED_MODEL = "savedModel";
[HttpGet]
public ActionResult Index()
{
Session[SESSION_SAVED_MODEL] = new EmailFormModel();
return View(Session[SESSION_SAVED_MODEL]);
}
public ActionResult Sent()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Index(EmailFormModel model)
{
//other irrelevant code
if (Request.Params["Ekstra_Ressurs"] != null)
{
model.Ressurs.Add(new RessursBehov());
Session[SESSION_SAVED_MODEL] = model;
}
}
return View(model);
}
}
我的模型
namespace WebApplication6.Models
{
public class EmailFormModel
{
[Required, Display(Name = "Prosjektnummer")]
public string Prosjektnummer { get; set; }
[Required, Display(Name = "Prosjektnavn")]
public string Prosjektnavn { get; set; }
[Required, Display(Name = "Prosjekttype")]
public string Prosjekttype { get; set; }
[Required, Display(Name = "Prosjektleder")]
public string Prosjektleder { get; set; }
public List<RessursBehov> Ressurs = new List<RessursBehov>()
{
new RessursBehov() };
}
public class RessursBehov
{
[Required, Display(Name = "Ressurstype")]
public string Ressurstype { get; set; }
[Required, Display(Name = "Navn på ressurs")]
public string Navn_På_Ressurs { get; set; }
[Required, Display(Name = "Ukenummer")]
public int? Ukenummer { get; set; }
[Required, Display(Name = "Antall timer")]
public int? Antall_Timer { get; set; }
[Required, Display(Name = "Antall uker")]
public int? Antall_Uker { get; set; }
}
}
}
我认为
@model WebApplication6.Models.EmailFormModel
@{
ViewBag.Title = "Registrer nytt prosjekt";
List<SelectListItem> prosjektTypeListe = new List<SelectListItem>()
{
new SelectListItem { Text = "Prosjekt", Value = "Prosjekt" },
new SelectListItem { Text = "Forvaltning", Value = "Forvaltning" }
};
List<SelectListItem> ressurstypeliste = new List<SelectListItem>()
{
new SelectListItem { Text = "utvikler", Value = "utvikler" },
new SelectListItem { Text = "frontendutvikler", Value = "frontendutvikler" },
new SelectListItem { Text = "epi-utvikler", Value = "epi-utvikler" },
new SelectListItem { Text = "webnodesutvikler", Value = "webnodesutvikler" },
new SelectListItem { Text = "designer", Value = "designer" },
new SelectListItem { Text = "rådgiver", Value = "rådgiver" },
new SelectListItem { Text = "prosjektleder", Value = "prosjektleder" }
};
}
<div class="title">
<div class="text-center">
<h2>@ViewBag.Title</h2>
</div>
</div>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="rows">
<div class="row">
<div class="col-md-4"></div>
@Html.LabelFor(m => m.Prosjektnummer, new { @class = "col-md-1 text-center" })
<div class="col-md-7">
@Html.TextBoxFor(m => m.Prosjektnummer, new { @class = "html_label" })
@Html.ValidationMessageFor(m => m.Prosjektnummer)
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
@Html.LabelFor(m => m.Prosjektnavn, new { @class = "col-md-1 text-center" })
<div class="col-md-7">
@Html.TextBoxFor(m => m.Prosjektnavn, new { @class = "html_label" })
@Html.ValidationMessageFor(m => m.Prosjektnavn)
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
@Html.LabelFor(m => m.Prosjekttype, new { @class = "col-md-1 text-center" })
<div class="col-md-7">
@Html.DropDownListFor(m => m.Prosjekttype, prosjektTypeListe, "-- Velg Prosjekttype --", new { @class = "dropdown" })
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
@Html.LabelFor(m => m.Prosjektleder, new { @class = "col-md-1 text-center" }) <!--tar inn m som parameter og returnerer m.prosjektleder-->
<div class="col-md-7">
@Html.TextBoxFor(m => m.Prosjektleder, new { @class = "html_label" })
@Html.ValidationMessageFor(m => m.Prosjektleder)
</div>
</div>
@for (var i = 0; i < Model.Ressurs.Count; i++)
{
<div class="row">
<div class="col-md-4"></div>
@Html.LabelFor(m => Model.Ressurs[i].Ressurstype, new { @class = "col-md-1 text-center" })
<div class="col-md-7">
@Html.DropDownListFor(m => Model.Ressurs[i].Ressurstype, ressurstypeliste, "-- Velg ressurstype --", new { @class = "dropdown" })
</div>
</div>
<div class="row">
<div class="col-md-3"></div>
@Html.LabelFor(m => Model.Ressurs[i].Navn_På_Ressurs, new { @class = "col-md-2 text-right" })
<div class="col-md-7">
@Html.TextBoxFor(m => Model.Ressurs[i].Navn_På_Ressurs, new { @class = "html_label" })
@Html.ValidationMessageFor(m => Model.Ressurs[i].Navn_På_Ressurs)
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
@Html.LabelFor(m => Model.Ressurs[i].Ukenummer, new { @class = "col-md-1 text-center" })
<div class="col-md-7">
@Html.TextBoxFor(m => Model.Ressurs[i].Ukenummer, new { @class = "html_label" })
@Html.ValidationMessageFor(m => Model.Ressurs[i].Ukenummer)
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
@Html.LabelFor(m => Model.Ressurs[i].Antall_Timer, new { @class = "col-md-1 text-center" })
<div class="col-md-7">
@Html.TextBoxFor(m => Model.Ressurs[i].Antall_Timer, new { @class = "html_label" })
@Html.ValidationMessageFor(m => Model.Ressurs[i].Antall_Timer)
</div>
</div>
<div class="row">
<div class="col-md-4"></div>
@Html.LabelFor(m => Model.Ressurs[i].Antall_Uker, new { @class = "col-md-1 text-center" })
<div class="col-md-7">
@Html.TextBoxFor(m => Model.Ressurs[i].Antall_Uker, new { @class = "html_label" })
@Html.ValidationMessageFor(m => Model.Ressurs[i].Antall_Uker)
</div>
</div>
}
<br />
<div class="row">
<div class="col-md-5"></div>
<div class="col-md-2">
<input type="submit" class="btn btn-default" value="Legg til ressurser" name="Ekstra_Ressurs" />
</div>
<div class="col-md-2">
<input type="submit" class="btn btn-primary" value="Send inn mail" name="Sendknapp" />
</div>
</div>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
为了达到模型在HttpPost索引操作
1)你应该在GET Index动作方法中传递EmailFormModel类型的模型给View。
EmailFormModel model = new EmailFormModel();
Session[SESSION_SAVED_MODEL]=model;
return View(model);
你应该在lambda表达式
处使用Model @Html.TextBoxFor(m => Model.Prosjektleder, new { @class = "html_label" })
你所要做的就是在html属性中添加@Name,然后你就不需要使用session了。
@Html.DropDownListFor(m => m.Prosjekttype, prosjektTypeListe , "-- Velg Prosjekttype --", new { @class = "dropdown" , @Name = "Prosjekttype" })