【问题标题】:MVC problem with ID field which is primary key and identity field带有作为主键和身份字段的 ID 字段的 MVC 问题
【发布时间】:2020-06-08 07:26:18
【问题描述】:

首先,我是业余爱好者,还在学习 MVC。 我正在制作简单的应用程序,例如地址簿。

我通过实体框架将我的项目与带有一张表的 sql 数据库连接起来。 SQL 表中的第一行是 ID,它是主键和标识字段。当我自动生成详细信息视图并尝试运行它时,出现此错误:

“参数字典包含“Akvizicije_App_1_6.Controllers.HomeController”中方法“System.Web.Mvc.ActionResult Details(Int32)”的不可为空类型“System.Int32”的参数“id”的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。 参数名称:参数"

public ActionResult Details(int id)

    {

        Contacts contact = (from k in Context.Contacts

                            where k.idContact == id

                            select k).Single();

        return View(contact);

    }

我知道有 int id 的参数,它不能为空,因为它是主键和标识字段。 但我不知道如何解决这个问题。如果有人可以帮助我。 我将非常感谢。 :)


@{
    ViewBag.Title = "Details";
}

<h2>Details</h2>

<div>
    <h4>Kontakti</h4>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.Zupanija)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Zupanija)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Opcina)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Opcina)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.PostanskiBroj)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.PostanskiBroj)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.NazivNaselja)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.NazivNaselja)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.NazivUlice)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.NazivUlice)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.KucniBroj)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.KucniBroj)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.kcbr)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.kcbr)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Aktivan)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Aktivan)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.ImeOsobe)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.ImeOsobe)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.PrezimeOsobe)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.PrezimeOsobe)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.KontaktBroj)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.KontaktBroj)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Email)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Email)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Komentar)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Komentar)
        </dd>

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

Its not on english but you will understand.



【问题讨论】:

  • 当我手动输入 /Details/1 时它可以工作,但我如何解决它会自动运行。由于我创建了身份字段 ID,但它会自动进行。
  • Action 被称为“public ActionResult Details(int id)” 它是从视图中调用的。每当我转到正确的 ID 号的详细信息时,我如何才能自动生成它
  • 是的。我会更新我的上篇文章。

标签: sql asp.net-mvc model-view-controller


【解决方案1】:

首先是检查您的数据库。你那里有记录吗?

也许使用 Find() 或 FirstOrDefault() 函数来代替查询

如果你有它在其他控制器上 @Html.ActionLink("Edit", "Details","ControllerName", null, new { id = Model.idKontakt })

您可以使用调试器检查详细信息操作中具有 id 的值

【讨论】:

  • 我有一个测试条目。
  • 也许您没有从您的视图中传递 id?例如:@Html.ActionLink("ShowDetails", "Details", item.id)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
相关资源
最近更新 更多