Asp.net MVC UpdateModel(myClass)的基本问题

时间:2009-09-01 15:29:50

标签: asp.net-mvc binding controller updatemodel

在Asp.net MVC 1应用程序的Controller中,我想使用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 个答案:

答案 0 :(得分:3)

看起来你正试图让控制器根据表单元素更新模型。试试这个:

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

在您的代码中,您正在创建一个新的TestModel,而不是让MVC运行时从HttpPost序列化它。我也让自己缠绕在这个轴上,你不是唯一一个!

答案 1 :(得分:2)

制作公共字段的属性:

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

答案 2 :(得分:0)

我对ASP.NET MVC不太熟悉,但你的TestSubmit方法看起来不应该更像这样:

public ActionResult TestSubmit(TestInfo test)
{
  UpdateModel(test);
  return Json(test);
}

答案 3 :(得分:-1)

在控制器中你应该有两个方法,一个用于响应GET,另一个用于响应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);
}

请注意,那里没有UpdateMethodModelBinder会为您做到这一点。