从URL到数据库的传递ID为空

时间:2018-06-13 16:03:04

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我的观点看起来像这样 我的网址链接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 })

1 个答案:

答案 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);