C# ASP.net MVC 3编辑/删除问题

C# ASP.net MVC 3编辑/删除问题,c#,asp.net,database,asp.net-mvc-3,razor,C#,Asp.net,Database,Asp.net Mvc 3,Razor,所以我刚刚在完成了这个项目。我正在尝试创建一个CRUD,以便与已经存在的外部数据库一起使用,我只是将该项目用作我自己工作的指南。我已经能够更改某些变量名和连接,以连接到我尝试使用的数据库,甚至使用index方法显示了我想要的数据。我还能够让create方法工作,并且能够在正在使用的数据库中创建新数据。不幸的是,在我进行了所需的更改后,在使用Edit或Delete方法或save/Delete方法时,我无法将数据拉入 例如,当我按下编辑按钮时,它应该拉取我单击的记录,以便我可以编辑特定的记录信息,但

所以我刚刚在完成了这个项目。我正在尝试创建一个CRUD,以便与已经存在的外部数据库一起使用,我只是将该项目用作我自己工作的指南。我已经能够更改某些变量名和连接,以连接到我尝试使用的数据库,甚至使用index方法显示了我想要的数据。我还能够让create方法工作,并且能够在正在使用的数据库中创建新数据。不幸的是,在我进行了所需的更改后,在使用Edit或Delete方法或save/Delete方法时,我无法将数据拉入

例如,当我按下编辑按钮时,它应该拉取我单击的记录,以便我可以编辑特定的记录信息,但它抛出了一个错误,表示此变量不能接受空值,这就是为什么我在编辑删除方法中将int更改为字符串。这一部分已经解决

我认为这个问题与编辑和删除方法有关,当我告诉记录集时,它们没有拉取记录集。有人知道为什么在我告诉它保存更改后,它在编辑/删除或保存更改时不拉取记录集吗

我已经发布了我的paccontroller类,其中包含用于诊断的CRUD方法,以及我的iamp_映射类文件,其中包含我需要处理的3个字段。我90%确定我的控制器有问题,但是如果你需要更多关于这个问题的代码/信息,请给我留个便条,我会经常检查,因为我太困了!非常感谢你的帮助

遥控器 iamp_映射 编辑视图代码 }

Delete.cshtml
这里的问题是,当您单击编辑按钮/链接时,编辑操作将需要int类型的id(如果您使用int),但是如果您使用int?…这就是MVC的行为方式…您最好尝试使用url,例如http://urwebsite.com/Pa/Edit?id=[使用有效的id]…通过此操作,您将在编辑操作中拥有一个id

更新

我认为您在这里遇到的问题是编辑操作方法中的Id值为null…MVC引擎无法从Url模式中识别Id值

因此,在有编辑链接/按钮的页面上,您可以使用

<a href="/Pa/Edit/@model.id">Edit</a>
{

还要确保为url模式/Pa/Edit/{id}配置了路由

如果您想了解更多有关mvc中路由的信息,您可能需要阅读此文章

这将确保当对编辑操作方法发出Get请求时,可以识别id值


希望这有帮助…

我的链接由于某种原因无法获取id,因此我从一门课程中找到了解决方案。 他在函数中添加了第五个参数“null”,如下所示

@Html.ActionLink(“编辑”、“编辑”、“帐户”,新的{id=Account.id},null)
(文本、操作、控制器、路由值、null或HTML属性)
这为我解决了这个问题。

如何
db.iamp\u mapping.Find(id)呢
当iamp\u映射没有int-Id属性时工作?这是一个很好的问题,Henk,我也在想,当我试图修复错误时,我实际上将Id更改为iamp,我是否应该将其更改为PA或Major\u Program或Investment\u Area会像那样工作?我认为Id是一种迭代器,但我完全可以错!我想我知道了id来自何处,上面我添加了索引类中的代码,并解释了我所做的更改及其原因。我发布了视图代码,但我不明白如何在编辑控制器中使用url感谢您的帮助!感谢您的快速回复Nik我在阅读后解决了部分问题正在删除您的响应。这不完全是路由,但它确实涉及到用主键实例化id的索引。我所要做的就是在编辑操作链接后添加。然后我的数据按预期的方式填充。我已在上面发布了我的index.cshtml,以便下一个遇到此问题的人可以看到如何修复。我还有一个问题n如果你有时间的话。编辑方法现在工作得很好,但删除方法仍然很古怪。在我按下delete键后,它会删除删除屏幕上的数据,但不会在DB或索引屏幕上,它不会像应该的那样将我发送回索引屏幕。因此实际上它不会删除!啊…我太接近了。我已经发布了我的删除以上e视图供检查。非常感谢您继续帮助您摇滚!!
using System;
using System.Collections.Generic;

namespace DBFirstMVC.Models
{
    public partial class iamp_mapping
    {
        public string PA { get; set; }
        public string MAJOR_PROGRAM { get; set; }
        public string INVESTMENT_AREA { get; set; }
    }

}
@model DBFirstMVC.Models.iamp_mapping

@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>iamp_mapping</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.PA)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.PA)
            @Html.ValidationMessageFor(model => model.PA)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.MAJOR_PROGRAM)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.MAJOR_PROGRAM)
            @Html.ValidationMessageFor(model => model.MAJOR_PROGRAM)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.INVESTMENT_AREA)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.INVESTMENT_AREA)
            @Html.ValidationMessageFor(model => model.INVESTMENT_AREA)
        </div>

        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>
@model IEnumerable<DBFirstMVC.Models.iamp_mapping>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            PA
        </th>
        <th>
            MAJOR PROGRAM
        </th>
        <th>
            INVESTMENT AREA
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.PA)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.MAJOR_PROGRAM)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.INVESTMENT_AREA)
        </td>
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.PA }) |
        @Html.ActionLink("Details", "Details", new { id=item.PA }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.PA })
    </td>
</tr>
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.PA }) |
        @Html.ActionLink("Details", "Details", new { id=item.PA }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.PA })
    </td>
</tr>
@model DBFirstMVC.Models.iamp_mapping

@{
    ViewBag.Title = "Delete";
}

<h2>Delete</h2>

<h3>Are you sure you want to delete this?</h3>
<fieldset>
    <legend>iamp_mapping</legend>

    <div class="display-label">PA</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.PA)
    </div>

    <div class="display-label">MAJOR_PROGRAM</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.MAJOR_PROGRAM)
    </div>

    <div class="display-label">INVESTMENT_AREA</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.INVESTMENT_AREA)
    </div>
</fieldset>
@using (Html.BeginForm()) {
    <p>
        <input type="submit" value="Delete" /> |
        @Html.ActionLink("Back to List", "Index")
    </p>
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace DBFirstMVC
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Pa", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }
    }
}
<a href="/Pa/Edit/@model.id">Edit</a>
@foreach(var item in Model)
}