1

Asp.net MVC 1 アプリのコントローラーで、UpdateModel を使用してコントローラーの POST データを変数に入力したいと考えています。私は何十もの例を見てきましたが、最も基本的なものでさえ、静かに失敗しているようです。

これは、機能しない非常に基本的な例です。私は何を間違っていますか?

    public class TestInfo
    {
        public string username;
        public string email;
    }

   public class AdminController : Controller
    {

        public ActionResult TestSubmit()
        {
            var test = new TestInfo();
            UpdateModel(test);//all the properties are still null after this executes  
            //TryUpdateModel(test); //this returns true but fields / properties all null
            return Json(test);
        }


    }


//Form Code that generates the POST data
    <form action="/Admin/TestSubmit" method="post">
        <div>
            <fieldset>
                <legend>Account Information</legend>
                <p>
                    <label for="username">Username:</label>
                    <input id="username" name="username" type="text" value="" />
                </p>
                <p>
                    <label for="email">Email:</label>
                    <input id="email" name="email" type="text" value="" />
                </p>
                <p>
                    <input type="submit" value="Login" />
                </p>

            </fieldset>
        </div>
    </form>
4

4 に答える 4

3

フォーム要素に基づいてコントローラーにモデルを更新させようとしているようです。代わりにこれを試してください:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult TestSubmit(TestInfo test)
    {
        UpdateModel(test);
        return Json(test);
    }

コードでは、MVC ランタイムが HttpPost からシリアル化する代わりに、新しい TestModel を作成しています。これもアクセルを踏んでしまいました、あなただけじゃないですよ!

于 2009-09-01T15:33:45.413 に答える
2

public フィールドのプロパティを作成します。

    public class TestInfo
    {
        public string username {get;set;}
        public string email{get;set;}
    }
于 2009-09-01T15:37:58.493 に答える
0

私は ASP.NET MVC にあまり詳しくありませんが、TestSubmit メソッドは次のようにすべきではありません。

public ActionResult TestSubmit(TestInfo test)
{
  UpdateModel(test);
  return Json(test);
}
于 2009-09-01T15:33:50.170 に答える
-1

コントローラーには 2 つのメソッドが必要です。1 つは GET に応答するためのもので、もう 1 つは必要に応じて POST に応答するためのものです。

したがって、最初に GET メソッドを用意します。

public ActionResult Test ()
{
    return View (/* add a TestInfo instance here if you're getting it from somewhere - db etc */);
}

次に、POST メソッドが必要です。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Test (TestInfo test)
{
    return Json (test);
}

UpdateMethodそこには何もないことに注意してください。ModelBinderがそれを行っているはずです。

于 2009-09-01T15:39:43.637 に答える