【问题标题】:Pass ID from URL to Database is going null从 URL 到数据库的传递 ID 为空
【发布时间】:2018-06-13 16:03:03
【问题描述】:

我的视图是这样的 我的网址链接http://localhost:63897/UploadImages?id=1361。 1361 是我的pr_id。我需要将 1361 的 id 从 url 传递到数据库,但它会为空。

这是我的控制器代码:

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 })

【问题讨论】:

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


    【解决方案1】:

    您的视图包字典项的键是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 方法并尝试手动覆盖 value/id/name 等。帮助程序旨在正确设置 value/name/id 属性值。考虑使用视图模型并将这些For 方法与它们一起使用。那将是更少的代码。

    如果您的视图模型有一个名为 pr_id 的属性,请在您的 GET 操作中设置该属性值,将该视图模型发送到视图并在视图中(该视图模型是强类型的),只需调用 @987654334该属性的@方法

    @Html.HiddenFor(a=>a.pr_id);
    

    【讨论】:

    • 仍然为空。
    • 使用隐藏的辅助方法。查看更新的答案。
    猜你喜欢
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多