我的观点看起来像这样
我的网址链接http://localhost:63897/UploadImages?id=1361。 1361是我的pr_id
。我需要将来自url的1361的id传递给数据库,但它将为null。
这是我的控制器代码:
public ActionResult UploadImages(int id) {
ViewBag.prid = id;
return View();
}
[HttpPost]
public ActionResult UploadImages([Bind(Include = "id,photo_url,photo_caption,photo_credit,pr_id")] Photo photos, HttpPostedFileBase photo_file)
{
if (ModelState.IsValid)
{
if (photo_file != null && photo_file.FileName != null && photo_file.FileName != "")
{
try
{
string path = Path.Combine(Server.MapPath("~/Images/Releases"), Path.GetFileName(photo_file.FileName));
photo_file.SaveAs(path);
string f1 = path.Substring(path.LastIndexOf("\\"));
string[] split = f1.Split('\\');
string newpath = split[1];
string imagepath = "~/Images/Releases/" + newpath;
photos.photo_url = imagepath;
_db.Photos.Add(photos);
_db.SaveChanges();
}
catch (Exception ex)
{
ViewBag.Message = "ERROR:" + ex.Message.ToString();
}
return RedirectToAction("List");
}
}
return View();
}
查看:
@Html.HiddenFor(model => model.pr_id, new { @Value = ViewBag.id })
答案 0 :(得分:2)
您的查看包字典项的键是prid
。但在您的视图代码中,您使用的是其他密钥。
使用ViewBag.prid
。也可以使用Hidden
辅助方法。
@Html.Hidden("pr_id", new { @value = ViewBag.prid })
或者只写纯HTML并设置value
属性值。
<input type="hidden" name="pr_id" value="@ViewBag.prid" />
检查页面的查看源以确认将value
属性设置为名为pr_id
的隐藏输入元素
假设您修复了错误的ViewBag密钥名称,您现有的方法基本上会生成以下标记
<input Value="23" name="pr_id" type="hidden" value="0" />
请记住, Value != value
这是我不使用像ViewBag这样的动态内容的一个主要原因。你犯了这样一个愚蠢的错误,IDE /编译器没有警告/错误。它只是默默地失败:(如果你使用强类型的视图模型,编译器会在你犯一个愚蠢的错字时抱怨。
也不要使用*For
方法并尝试手动覆盖值/ id / name等。帮助程序旨在正确设置值/ name / id属性值。考虑使用视图模型并使用这些For
方法。这将是更少的代码。
如果您的视图模型具有名为pr_id
的属性,请在GET操作中设置该属性值,将该视图模型发送到视图和视图(强烈键入此视图模型),只需调用该属性的HiddenFor
方法
@Html.HiddenFor(a=>a.pr_id);