大家好!我是新来的,和其他人一样,是为了帮助我正在进行的一个小项目。
我在C#和Razor上的代码如下:应用程序的用户需要在先前存储在数据库中的配方中执行评级,其限制不能对配方进行多次评级。
没关系,但是需要将这个限制与评价配方的用户一起添加。我有一个列出所有用户的DropDown列表,可以提交到DB和所有用户,但我希望登录的用户提交表单,而不是其他任何人或“可选择”,这就是现在的工作方式。
我正在使用会话变量来获取用户的ID和一般信息,但我无法使其工作,因为外键与此相关,当我尝试手动检索它时,我只获得了ID (这是表中的外键),但需要显示谁在进行提交而不是ID,即使在HiddenFor中需要。
我该如何解决这个小问题?真的很感激任何帮助:)
来自recetastblController.cs的GET和POST方法
// 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");
}
完整视图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")
}
答案 0 :(得分:0)
ViewBag对象用于提供可以使用的视图数据。
对于get / post操作,从长远来看,将视图绑定到视图模型会好得多。例如:
视图模型:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Rate()
{
return View(GetNewModel());
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Rate(usuarioConectado model)
{
///
/// When the user posts the form,
/// the model parameter will have all
/// of the values set in the 'get' method,
/// along with the items selected.
///
SaveModel(model);
return View(GetNewModel());
}
private usuarioConectado GetNewModel()
{
return new usuarioConectado()
{
recetastbl_id_list = new List<string>() { "1", "2", "3" },
usuariostbl_id_list = new List<string>() { "4", "5", "6" },
valoracion = new List<string>() { "7", "8", "9" },
username = "usuario1",
usuariostbl_id = "1",
};
}
private void SaveModel(usuarioConectado model)
{
//Save Stuff
}
控制器:
@model MVCAnswers.Models.usuarioConectado
@{
ViewBag.Title = "Ans40824091";
Layout = "~/Views/Shared/_Default.cshtml";
}
<h2>Ans40824091</h2>
@using (Html.BeginForm("Rate", "Ans40824091"))
{
<div class="form-group >
@Html.LabelFor(model => model.usuariostbl_id_list, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.usuariostbl_id_list, new SelectList(Model.usuariostbl_id_list, Model.usuariostbl_id_list), htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.usuariostbl_id, "", new { @class = "text-danger" })
</div>
@Html.LabelFor(model => model.recetastbl_id_list, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.recetastbl_id_list, new SelectList(Model.recetastbl_id_list, Model.recetastbl_id_list), htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.recetastbl_id_list, "", new { @class = "text-danger" })
</div>
@Html.LabelFor(model => model.valoracion, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.valoracion, new SelectList(Model.valoracion, Model.valoracion), htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.valoracion, "", new { @class = "text-danger" })
</div>
<h2>Hidden:</h2>
<div class="col-md-10">
@Html.Hidden("username", Model.username)
@Html.Hidden("usuariostbl_id", Model.usuariostbl_id)
</div>
<input type="submit" name="submit" value="Submit" />
}
观点:
String[] s = {"1","2","13","13a","10","10a","1a","1,"};
注意: 使用&#39;隐藏&#39;表单上的输入有一些安全风险。但是,如果您在http帖子上执行验证,风险应该非常小。