大家好!我在這裏是新來的,和其他人一樣,來爲我正在做的一個小項目尋求幫助。用asp.net mvc 5設置會話變量的值
我在C#和Razor上的代碼的工作原理如下:應用程序的用戶需要在先前存儲在數據庫中的配方中執行評級,但限制不能對食譜進行多次評級。
事情很好,但需要與評價配方的用戶一起添加該限制。我得到了一個列出所有用戶的DropDown列表,並且可以將所有用戶提交到數據庫中,但我希望已登錄的用戶提交表單,而沒有其他人或者「可選擇」,這就是現在的工作方式。
我使用會話變量獲取用戶的ID和一般信息,但我無法得到它的工作,因爲外鍵與此相關,當我嘗試手動檢索它時,我只獲得了ID(即表中的外鍵),但需要顯示誰在進行提交而不是ID,即使是在HiddenFor中被請求。
我該如何解決這個小問題?任何幫助是真正的讚賞:)從recetastblController.cs
// GET: recetastbl/Rate
public ActionResult Rate(usuariostbl usuariostbl)
{
var puntuaciontbl = db.puntuaciontbl.Include(p => p.recetastbl).Include(p => p.usuariostbl);
ViewBag.usuariostbl = Session["usuarioConectado"];
ViewBag.usuariostbl_id = ViewBag.usuariostbl.id;
ViewBag.usuariostbl.username = ViewBag.usuariostbl.username;
ViewBag.usuariostbl_id = new SelectList(db.usuariostbl, "id", "username");
ViewBag.recetastbl_id = new SelectList(db.recetastbl, "id", "receta");
return View();
}
// POST: recetastbl/Rate
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Rate([Bind(Include = "id,valoracion,usuariostbl_id,recetastbl_id")] puntuaciontbl puntuaciontbl)
{
if (ModelState.IsValid)
{
db.puntuaciontbl.Add(puntuaciontbl);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.usuariostbl_id = new SelectList(db.usuariostbl, "id", "username", puntuaciontbl.usuariostbl_id);
ViewBag.recetastbl_id = new SelectList(db.recetastbl, "id", "receta", puntuaciontbl.recetastbl_id);
return View("Index");
}
GET和POST方法的完整視圖Rate.cshtml
@model Prueba3Progra4.puntuaciontbl
@{
ViewBag.Title = "Valorar Receta";
}
<h2>Valorar</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Receta</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.valoracion, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
1 Estrella
@Html.RadioButtonFor(model => model.valoracion, "1", new { htmlAttributes = new { @class = "form-control" } })
2 Estrellas
@Html.RadioButtonFor(model => model.valoracion, "2", new { htmlAttributes = new { @class = "form-control" } })
3 Estrellas
@Html.RadioButtonFor(model => model.valoracion, "3", new { htmlAttributes = new { @class = "form-control" } })
4 Estrellas
@Html.RadioButtonFor(model => model.valoracion, "4", new { htmlAttributes = new { @class = "form-control" } })
5 Estrellas
@Html.RadioButtonFor(model => model.valoracion, "5", new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.valoracion, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.usuariostbl_id, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("usuariostbl_id", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.usuariostbl_id, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.recetastbl_id, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("recetastbl_id", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.recetastbl_id, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Valorar" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Volver a la Lista", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
您的代碼示例有點混亂。您的控制器操作設置視圖包屬性,但您的剃鬚刀代碼看起來像視圖綁定到模型。我對你的困難的猜測是你的行爲是斷開的。如果您使用單獨的get/post控制器方法,那麼模型綁定可以將這些信息從客戶端傳遞到服務器,而無需使用viewbag或會話狀態。如果你願意,我可以在這裏發表一個例子。 – Paul
是的,當然! :)我只發佈GET調用,因爲我認爲它會更容易理解,但似乎不是哈哈。我會將它附加到主帖子中,以便更好地檢查它。或者我應該爲這兩個文件添加完整的代碼? –