Основная проблема с Asp.net MVC UpdateModel (myClass) - PullRequest
1 голос
/ 01 сентября 2009

В моем контроллере в приложении 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 ]

3 голосов
/ 01 сентября 2009

Похоже, вы пытаетесь заставить контроллер обновить модель на основе элементов формы. Попробуйте вместо этого:

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

В вашем коде вы создаете новую TestModel вместо того, чтобы позволить среде выполнения MVC сериализовать ее из HttpPost. Я тоже позволил себе обернуться вокруг акселя, ты не единственный!

2 голосов
/ 01 сентября 2009

сделать свойства вашего публичного поля:

    public class TestInfo
    {
        public string username {get;set;}
        public string email{get;set;}
    }
0 голосов
/ 01 сентября 2009

В контроллере у вас должно быть два метода, один для ответа на 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);
}

Обратите внимание, что там нет UpdateMethod, ModelBinder сделал бы это для вас.

0 голосов
/ 01 сентября 2009

Я не слишком знаком с ASP.NET MVC, но не должен ли ваш метод TestSubmit выглядеть так:

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