1

MVCのPOSTに少し問題があります。

私は私のモデルを持っています

    [ScaffoldColumn(false)]
    public int Id { get; set; }

    [ScaffoldColumn(false)]
    public Guid UId { get; set; }

    [Required(ErrorMessage = "Indtast dato")]
    [DataType(DataType.Time)]
    public DateTime Date { get; set; }

    [Required(ErrorMessage = "Indtast overskrift")]
    public string Headline { get; set; }

    [Required(ErrorMessage = "Indtast text")]
    [AllowHtml]
    public string Text { get; set; }

モデルから挿入を行うことができます:

@using (Html.BeginForm(ViewData["methode"].ToString(), "News", Model, FormMethod.Post))
{
    @Html.HiddenFor(n => n.Id)
    <table>
        <tr>
            <td style="width:65px">
              @Html.LabelFor(n => n.Date, "Dato")
            </td>
            <td style="width:100%">
              @Html.Telerik().DatePickerFor(n => n.Date).Value(@Model.Date)
            </td>
        </tr>
        <tr>
            <td>
              @Html.LabelFor(n => n.Headline, "Overskrift")
            </td>
            <td>
              @Html.TextBoxFor(n => n.Headline, new { @class = "form_smallbox" })
            </td>
        </tr>
        <tr>
            <td>
            </td>
            <td>
            </td>
        </tr>
        <tr>
            <td colspan="2">
            @(Html.Telerik().EditorFor(e => e.Text)
                            .Encode(false)
                            .Tools(tools => tools.Clear()
                                 .Bold()
                                 .Italic()
                                 .Underline()
                                 .Separator()
                                 .JustifyLeft()
                                 .JustifyCenter()
                                 .JustifyRight()
                                 .Separator()
                                 .FontSize()
                                 .FontColor()
                                 .FormatBlock()
                                 .Separator()
                                 .InsertUnorderedList()
                                 .InsertOrderedList()
                                 .CreateLink()
                            )
                            .Localizable("da-DK")
                            .HtmlAttributes(new { style = "height:350px;" })
            )
            </td>
        </tr>
    </table>
    @Html.ValidationSummary()

    <input type="image" src="../../Content/Image/btn_save.png" title="Gem nyhed" />
}

[HttpPost]
public ActionResult InsertNews(DisplayNews news)
{
    if (ModelState.IsValid)
    {
        news.Text = "<html><head></head><body>" + news.Text + "</body></html>";
        News newNews = new News
        {
            UId = Guid.NewGuid(),
            Date = news.Date,
            Headline = news.Headline,
            Text = MaterialeLagretLibrary.Helpers.StrToByteArray(news.Text)
        };
        MaterialeLagretLibrary.DBHandler.NewsDBHandler.InsertNews(newNews);
    }
    return RedirectToAction("News");
}

そこには問題ありません。UpdateNewsただし、更新を行います。の代わりにActionNameを使用しますInsertNews

コントローラはほとんど同じように見えます:

[HttpPost]
public ActionResult UpdateNews(Display news)
{
    if (ModelState.IsValid)
    {
        news.Text = "<html><head></head><body>" + news.Text + "</body></html>";
        MaterialeLagretLibrary.DBHandler.NewsDBHandler.UpdateNews(news);
    }
    return RedirectToAction("News");
}

問題は、エラーが発生することです。

このリクエストのクエリ文字列の長さが、設定されたmaxQueryStringLength値を超えています。

そして、POSTではなくGETであるかのようにQueryStringを作成します。

私は何が間違っているのですか?

レンダリング後のフォームヘッダー:

<form method="post" action="/News/UpdateNews/0?UId=00000000-0000-0000-0000-000000000000&Date=06%2F13%2F2012%2000%3A00%3A00&Headline=Nyhedsbrev&Text=%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3Cp%3E%3Cspan%20style%3D%22color%3A%23ff7f27%3B%22%3EKATALOG%20NR%201037%3C%2Fspan%3E%3Cbr%20%2F%3E%3Cspan%20style%3D%22color%3A%23ff7f27%3B%22%3EHJ%C3%86LP%20%E2%80%93%20EN%20ELEV%20MED%20H%C3%98RETAB%20I%20MIN%20KLASSE!%3C%2Fspan%3E%3Cbr%20%2F%3E%3Cspan%20style%3D%22color%3A%23ff7f27%3B%22%3E%E2%80%9DHj%C3%A6lp%20-%20en%20elev%20med%20h%C3%B8...E-p%C3%A6dagoger%20og%20taleh%C3%B8rep%C3%A6dagoger%2C%20som%20i%20deres%20hverdag%20arbejder%20med%20b%C3%B8rn%20med%20h%C3%B8retab.%3C%2Fspan%3E%3Cbr%20%2F%3E%3Cspan%20style%3D%22color%3A%23ff7f27%3B%22%3EFor%20l%C3%A6rere%20og%20p%C3%A6dagoger%20i%20folkeskolen%2C%20som%20f%C3%A5r%20et%20inkluderet%20barn%20med%20h%C3%B8retab%2C%20vil%20denne%20bog%20v%C3%A6re%26nbsp%3B%3C%2Fspan%3E%3Cspan%20style%3D%22color%3A%23ff7f27%3B%22%3Een%20rigtig%20god%20guide.%3C%2Fspan%3E%3C%2Fp%3E%3C%2Fbody%3E%3C%2Fhtml%3E">

アクションからクエリ文字列を削除する必要があるようです。

4

1 に答える 1

1

GETの場合、POSTとマークされたアクションに到達することはないため、投稿する必要はありません。

モデルはルート値であると想定されていますか?FormMethod.Postの引数値が明らかに他のパラメーターに移動するため、使用可能なHtml.BeginFormオーバーロードを確認します。


アップデート:

モデルにルート値を本当に追加したいことを確認した後、私はあなたの問題が何であるかを知っていると思います:

実際にはフォームをPOSTとして送信していますが、ルート値(モデル)が原因で、クエリ文字列が長すぎます。

ページを読み込んでソースを取得すると、次のようなものが見つかります。

<form action="/yourpage?too-many-parameters-here-which-make-your-query-string-too-long" method="post">

フォームは実際にはPOSTとして送信されますが、URLが長すぎます。ここでの目的はわかりませんが、モデルデータを非表示フィールドとしてフォームに含めるか、送信する値の量を減らすことができます。

于 2012-06-14T14:53:36.183 に答える