TryUpdateModel не обновляет объект после изменения значения свойства - PullRequest
0 голосов
/ 18 сентября 2010

Я использую MVC 2 и EF4. У меня есть представление, которое отображает свойства моего приложения (класса). Не все свойства отображаются в представлении. Есть пара свойств, которые необходимо установить после нажатия кнопки отправки.

Я получаю подтверждение клиента, но проверка на моем сервере все еще не проходит. В моем действии CreateApplication я получаю объект Application, обновляю свойство и проверяю ModelState.IsValid. Это все еще ложь. Я сделал цикл по списку ошибок, и он отображает текст ошибки, который я установил в свойстве SubmitterEmployeeNumber, используя аннотацию Обязательные данные. Я установил его и обновил свою модель, но проверка все еще не проходит. Вот мой код:

[HttpPost]
public ActionResult CreateApplication(Application application)
{
   application.SubmitterEmployeeNumber = "123456";

   TryUpdateModel(application);

   if (ModelState.IsValid)
   {
   }
}

Вот как я отображаю вид:

public ActionResult CreateApplication()
{
   var viewModel = new ApplicationViewModel(new Application(), db.AccountTypes);

   return View(viewModel);
}

Как мне пройти проверку после установки свойства после привязки?

В чем разница между UpdateModel и TryUpdateModel и когда мне нужно использовать каждый из них?

EDIT:

Я изменил название действия на:

[HttpPost]
public ActionResult CreateApp()
{
   var application = new Application
   {
      ApplicationStateID = 1,
      SubmitterEmployeeNumber = "123456"
   };

   if (TryUpdateModel(application))
   {
      int success = 0;
   }
}

Вот мой взгляд:

<% using (Html.BeginForm("CreateApp", "Application")) {%>

TryUpdateModel все еще проверяется как ложное. Я вставил int success = 0;, просто чтобы посмотреть, войдет ли он в него, но это не так.

1 Ответ

1 голос
/ 18 сентября 2010
[HttpPost]
public ActionResult CreateApplication()
{
    var application = new Application 
    {
        SubmitterEmployeeNumber = "123456"
    };
    if (TryUpdateModel(application)) 
    {
        // The model is valid => submit values to the database
        return RedirectToAction("Success");
    }
    return View(application);
}

ОБНОВЛЕНИЕ: из-за многих недоразумений в разделе комментариев вот полный рабочий пример.

Модель:

public class Application
{
    [Required]
    public int? ApplicationStateID { get; set; }

    [Required]
    public string SubmitterEmployeeNumber { get; set; }

    [Required]
    public string Foo { get; set; }

    [Required]
    public string Bar { get; set; }
}

Контроллер:

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        var application = new Application();
        return View(application);
    }

    [HttpPost]
    [ActionName("Index")]
    public ActionResult Create()
    {
        var application = new Application
        {
            ApplicationStateID = 1,
            SubmitterEmployeeNumber = "123456"
        };
        if (TryUpdateModel(application))
        {
            // success => update database, etc...
            return Content("yupee");
        }

        // failure => redisplay view to fix errors
        return View(application);
    }
}

Вид:

<% using (Html.BeginForm()) { %>
    <div>
        <%: Html.LabelFor(x => x.Foo) %>
        <%: Html.TextBoxFor(x => x.Foo) %>
        <%: Html.ValidationMessageFor(x => x.Foo) %>
    </div>

    <div>
        <%: Html.LabelFor(x => x.Bar) %>
        <%: Html.TextBoxFor(x => x.Bar) %>
        <%: Html.ValidationMessageFor(x => x.Bar) %>
    </div>

    <input type="submit" value="GO GO" />
<% } %>

Надеюсь, это прояснит ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...