0

部分ビューに問題があります。お知らせのインデックス ビューがあり、部分ビューを追加して同じページ内に新しいお知らせを作成しようとしています。

部分ビューを表示し、フォームを送信して新しいレコードを作成できます。レコードはデータベースに送信されますが、ページを再レンダリングすると、次のエラーが表示されます: ハンドラー 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper' の子要求の実行中にエラーが発生しました, {"子アクションはリダイレクト アクションを実行できません."} をインデックス ページの Html.Action ステートメントに追加します。

私はこれを機能させるのに苦労しており、最初に Html.Partial を Html.Action ステートメントに変更しました。これは、コントローラー メソッドが起動しなかったためです。 NET はリダイレクト アクションが何を行っているかを認識しないため、自動的に停止し、コード ブロック内で Html.Action を Html.RedirectAction に変更しようとしましたが、上記と同じエラーが発生します。

私のモデルは非常に単純です。

public class Announcement
{
    public Announcement()
    {
        AnnouncementDate = System.DateTime.Now;
    }

    [Key]
    public int AnnouncementID { get; set; }

    public string Title { get; set; }
    public string Type { get; set; }

}

私のコントローラーの方法:

public ViewResult Index(string searchString, int? page)
    {
        var Announcements = from a in db.Announcements
                        select a;
        if (!String.IsNullOrEmpty(searchString))
        {
            Announcements = Announcements.Where(s => (s.Title.ToUpper().Contains(searchString.ToUpper()) || s.AnnouncementText.ToUpper().Contains(searchString.ToUpper())));
        }
        Announcements = Announcements.OrderBy(s => s.Title);

        int pageSize = 10;
        int pageNumber = (page ?? 1);

        return View(Announcements.ToPagedList(pageNumber, pageSize));
    }

    //
    // GET: /Announcement/Create

    public ActionResult Create()
    {
        Announcement announcement = new Announcement();

        return PartialView(announcement);       
    }

    //
    // POST: /Announcement/Create

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Announcement announcement)
    {
        if (ModelState.IsValid)
        {
            db.Announcements.Add(announcement);
            db.SaveChanges();
            return RedirectToAction("Index"); 
        } 

        return View(announcement);
    }

インデックス.cshtml

@model PagedList.IPagedList<Project.Models.Announcement>     
@using PagedList.Mvc;   
@using PagedList;

@using (Html.BeginForm())
{
    @Html.TextBox("SearchString", ViewBag.CurrentFilter as string, new { @class = "search-query", placeholder = "Search by name" })
    <input type="submit" value="Search" class="btn" />
}
@item.Title
@item.Type
@Html.Action("Create"); // This is the line causing errors after I submit the Create form.  Have tried changing to Html.RedirectAction

.cshtml を作成します。

@model Project.Models.Announcement

@using (Html.BeginForm())   
{
    @Html.AntiForgeryToken()

    @Html.TextBoxFor(model => model.Title, new { @style = "width:250px" })
    @Html.TextBoxFor(model => model.Type, new { @style = "width:250px" })

    <input type="submit" value="Create" class="btn btn-small" />        
}
4

1 に答える 1

2

ローカルでいくつかのテストを行った後...

あなたが保つことができます

@Html.Action("Create")

ただし、小さなことを 1 つ変更する必要があります。フォームで POST が指すアクションを定義します:)

@model Project.Models.Announcement

@using (Html.BeginForm("Create"))   
{
    @Html.AntiForgeryToken()

    @Html.TextBoxFor(model => model.Title, new { @style = "width:250px" })
    @Html.TextBoxFor(model => model.Type, new { @style = "width:250px" })

    <input type="submit" value="Create" class="btn btn-small" />        
}
于 2013-06-19T09:45:49.063 に答える