0

私は最初の ASP.NET MVC プロジェクトに取り組んでおり、編集ビューからコントローラー アクションにデータを返すときに奇妙な動作が見られます。

現在、ページに 3 つのテキスト ボックスと、PKey 用の非表示のテキスト ボックスが 1 つあります。ビューデータからすべてが正しく取り込まれていますが、フォームを送信すると、3 つのフィールドのうち 2 つだけが返されたモデルに表示されます。ただし、3 つのフィールドはすべて Request オブジェクトに正しく設定されています。

私はおそらくそれをうまく説明していませんが、うまく説明できるように、関連するコードの抜粋をいくつか示します。

    public ActionResult Edit(System.Guid Id)
    {

        SetBase sb = setBaseRepository.Get(Id);
        return View("Edit", sb );
    }
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(SetBase setBase)
    {
        //if (setBase.Title.Trim().Length == 0)
        //{
        //    ModelState.AddModelError("Title", "Title is required.");
        //}
        if (setBase.Year.Trim().Length == 0) 
        {
            ModelState.AddModelError("Year", "Year is required.");
        }
        if (!ModelState.IsValid)
        {
            return View("Edit", setBase);
        }
        setBaseRepository.SaveOrUpdate(setBase);
        return View();
    }

ビュー自体の「肉」は次のとおりです。

<viewdata model="CardTracker.Core.SetBase">
<content name="MainContent">
<% MvcForm form = Html.BeginForm("Edit", "SetBase", Model.Id); %>

<%=Html.ValidationSummary("Update was unsuccessful. Please correct the errors and try again.", new { class = "dataEntryError" })%>

<fieldset>
    <legend class="dataEntry">Edit Set Base</legend>   
<div>
!{Html.Hidden("Id")}
<label class="dataEntry" for="Title" >Title: </label> ${Html.TextBox("Title", Model.Title, new { class = "dataEntryLong" })}
<%=Html.ValidationMessage("Title", "***", new { class = "dataEntryError" })%>
</br>

<label class="dataEntry" for="Year">Year:</label>${Html.TextBox("Year", null, new { class = "dataEntryNumber" })}
<%=Html.ValidationMessage("Year", "***", new { class = "dataEntryError" })%>
</br>


</div>
<input type="submit" value="Update" class="button" /> 
</fieldset>
<% form.EndForm(); %>
</content>

「ID」フィールドと「年」フィールドは問題なく返されますが、「タイトル」は常に空白になります。私は、それらのすべてのスペルがどこでも正しいことを確認しました。

私は明らかに間違ったことをしていると確信していますが、それはわかりません。私が調査した多くの例は役に立たず、それらのほとんどは編集ではなく追加機能を示しています。

あらゆる助けを前もって感謝します。

4

1 に答える 1

0

おそらく本当に役立つ何かに遭遇するまで、気づいたことをリストアップし始めます。

  1. Title フィールドは、実際にモデルを参照する唯一のフィールドです。Year フィールドの初期値は null です。これはあまり重要ではないと思いますが、私が見ることができる唯一の違いです。
  2. ここで奇妙なエッジケースを見つけようとしているだけなので、BeginForm("Edit","SetBase", Model.id) ステートメントの "SetBase" 値が実際にコントローラーを呼び出していることを確認していますか? それはモデルと同じ名前です。これは明らかに問題ありませんが、それがコントローラーの名前であることを確認したかったのです。

...すべて問題ないように見えますが、明らかに何かがおかしいです。

于 2010-01-22T22:46:30.850 に答える