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);
    }

在您的代码中,您正在创建一个新的 TestModel,而不是让 MVC 运行时从 HttpPost 序列化它。我也让自己陷入了困境,你不是唯一的!

于 2009-09-01T15:33:45.413 回答
2

使您的公共领域的属性:

    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

在控制器中,您应该有两种方法,一种用于响应 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会为您完成。

于 2009-09-01T15:39:43.637 回答