1

今ちょっと探し回ってます。OptimisticConcurrency をキャッチして追加することを含むいくつかのソリューションを試しました。

"@Html.HiddenFor(model => model.OrganizationID)"

私の削除ページへ。私のインデックス (リスト)、作成、および編集ページは魅力のように機能します。ただし、行を削除しようとすると、次のエラーが表示されます。

DbUpdateConcurrencyException
Store の update、insert、または delete ステートメントが予期しない数の行 (0) に影響を与えました。エンティティが読み込まれてから、エンティティが変更または削除された可能性があります。ObjectStateManager エントリを更新します。

チュートリアルに従って、Database First アプリケーションを構築しました。現在、スムーズに機能するようになるまで、Organizations テーブルからデータを取り込んでいます。私の組織モデルは次のようになります (「コード生成項目の追加」から自動生成されました)。

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace VAGTC.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Organization
    {
        public Organization()
        {
            this.Contact_Title = new HashSet<Contact_Title>();
            this.Organization_Address = new HashSet<Organization_Address>();
            this.Organization_Business_Type = new HashSet<Organization_Business_Type>();
            this.Organization_Country = new HashSet<Organization_Country>();
            this.Organization_Email = new HashSet<Organization_Email>();
            this.Organization_Membership = new HashSet<Organization_Membership>();
            this.Organization_Notes = new HashSet<Organization_Notes>();
            this.Organization_Phone = new HashSet<Organization_Phone>();
            this.Organization_Website = new HashSet<Organization_Website>();
            this.Contacts = new HashSet<Contact>();
            this.Organization_Industry_Code = new HashSet<Organization_Industry_Code>();
        }

        public int OrganizationID { get; set; }
        public string Name { get; set; }

        public virtual ICollection<Contact_Title> Contact_Title { get; set; }
        public virtual ICollection<Organization_Address> Organization_Address { get; set; }
        public virtual ICollection<Organization_Business_Type> Organization_Business_Type { get; set; }
        public virtual ICollection<Organization_Country> Organization_Country { get; set; }
        public virtual ICollection<Organization_Email> Organization_Email { get; set; }
        public virtual ICollection<Organization_Membership> Organization_Membership { get; set; }
        public virtual ICollection<Organization_Notes> Organization_Notes { get; set; }
        public virtual ICollection<Organization_Phone> Organization_Phone { get; set; }
        public virtual ICollection<Organization_Website> Organization_Website { get; set; }
        public virtual ICollection<Contact> Contacts { get; set; }
        public virtual ICollection<Organization_Industry_Code> Organization_Industry_Code { get; set; }
    }
}

これは、組織コントローラーの削除 ActionResult です。

//
// GET: /Organization/Delete/5

public ActionResult Delete(int id)
{
    using (var db = new VAGTCEntities())
    {
        return View(db.Organizations.Find(id));
    }
}

//
// POST: /Organization/Delete/5

[HttpPost]
public ActionResult Delete(int id, Organization organization)
{
    try
    {
        // TODO: Add delete logic here
        using (var db = new VAGTCEntities())
        {
            db.Entry(organization).State = System.Data.EntityState.Deleted;
                db.SaveChanges();

        }
            return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

私のインデックスページでは、主キーを宣言しています:

@Html.ActionLink("Delete", "Delete", new { id=item.OrganizationID })

好奇心から追加してみることにしました

"@Html.HiddenFor(model => model.OrganizationID)"

フィールドセット内のページの上部と凡例タグの下ではなく、下部の BeginForm の下に:

@using (Html.BeginForm()) {
    <p>
        @Html.HiddenFor(model => model.OrganizationID)
        <input type="submit" value="Delete" /> |
        @Html.ActionLink("Back to List", "Index")
    </p>
}

低くて見よ-それはうまくいった。まだまだ投稿したい!おそらく他の誰かがそれを見つけて助けてくれるでしょう。なぜそうなのかは100%わかりませんが、誰かがこの問題に光を当てることができますか?

4

1 に答える 1

1

from ヘルパーを使用する場合

@using (Html.BeginForm()) {

次の出力を吐きます

<form>

</form>

隠しフィールドを投稿したい場合は、フォーム内に取得する必要があります。そうしないと投稿されません。これが、隠しフィールドをフォームの外に置いた理由OrganizationIDです0...

于 2012-11-08T06:31:46.033 に答える