【问题标题】:Details view doesn't work mvc 5详细信息视图不起作用 mvc 5
【发布时间】:2015-09-30 17:35:41
【问题描述】:

我有一个 MVC 5 应用程序。我跟进这个教程Getting Started with ASP.NET MVC 5

当我单击详细信息、编辑或删除时,我得到 HTTP 错误 400.0 - 错误请求。

我的索引视图

@foreach (var item in Model)
    {
 <div class="city">
 <h2>@Html.DisplayFor(modelItem => item.announce_PublishDate)</h2>
 <p>@Truncate(item.announce_Description, 90)</p>
 <p>@Html.ActionLink("more", "Details", new { id = item.announce_ID }) </p></div>}

我的详细信息视图

<div>
<h4>prokirikseis</h4>
<hr />
<dl class="dl-horizontal">
    <dd>
        @Html.DisplayFor(model => model.announce_ID)
    </dd>
    <dd>
        @Html.DisplayFor(model => model.announce_Description)
    </dd>
    <dd>
        @Html.DisplayFor(model => model.announce_PublishDate)
    </dd>

    </dl>
    </div>
      <p>
@Html.ActionLink("Edit", "Edit", new { id = Model.announce_ID }) |
@Html.ActionLink("Back to List", "Index")</p>

控制器

public ActionResult Details(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        announce announce= db.announce.Find(id);
        if (announce == null)
        {
            return HttpNotFound();
        }
        return View(announce);
    }

模型

public class announcements 
{
    [Key]
    public String announce_ID { get; set; }

    [Display(Name = "Date")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
    public Nullable<System.DateTime> announce_PublishDate { get; set; }

    [Display(Name = "Title")]
    public String announce_Description { get; set; }
}

我做错了什么?我注意到它在 url 中带来了正确的 ID。 http://localhost:zzzzz/ltest/Details/01_2.2 但它不会带来内容。 谢谢

【问题讨论】:

  • 01_2.2 不是有效的整数...
  • 感谢您的回复,我尝试使用其他 id,例如 106。但它显示“EntityFramework.dll 中发生'System.ArgumentException' 类型的异常,但未在用户代码中处理附加信息:其中一个主键值的类型与实体中定义的类型不匹配。有关详细信息,请参阅内部异常“我在模型中将字符串更改为 int 但它不起作用。

标签: asp.net-mvc


【解决方案1】:

您的操作方法接受 typeof int 的参数,但 announcements 类中的键是 string,而不是 int。 (并且您问题中的url 是将01_2.2 的值传递给Details() 方法,因此idnull)。

改变你的方法

public ActionResult Details(string id)

虽然我建议您实际上将密钥更改为自动递增的int

【讨论】:

  • 如果我需要 id 有像 / 这样的字符怎么办? - 和文字。它不适用于此记录。我的 RouteConfig 中是否需要新的 Maproute?你知道我该怎么做吗?
  • 这将是一个问题 - 您需要从路由定义中删除 {id} 参数,以便生成的 url 为 ../test/details?id=yourValue (即该值作为查询字符串而不是路由参数。但是为什么你的键是字符串?
  • 感谢您的快速回复,它有效。我将更改我的表,以便拥有一个正常的 ID。 (这是一张旧桌子)。再次感谢您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 2017-05-17
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多