Нулевая и всегда действительная модель передана в действие - PullRequest
1 голос
/ 16 июня 2011

Что не так? Модель всегда пуста.

Контроллер

[HttpGet]
public ViewResult Add()
{
    return View("Edit");
}

[HttpPost]
public ViewResult Add(Models.EditViewModel m)
{
    if (ModelState.IsValid)
    {
        return View("Success");
    }
    else
    {
        return View("Edit", m);
    }
}

Модель:

public class EditViewModel
{
    [Required]
    [Display(Name = "JobTitle", ResourceType = typeof(DisplayNames))]
    public string Title { get; set; }

    [Required]
    [Display(Name = "JobDescription", ResourceType = typeof(DisplayNames))]
    public string Description { get; set; }
}

View

@model MyWebSite.Models.EditViewModel
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true, "Please correct the errors and try again.")
    @Html.EditorForModel()
    <input type="submit" value="Send" />
}

Рендеринг

<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<form action="/MyAction" method="post"><div class="editor-label"><label for="Title">Fun&#231;&#227;o</label></div>
    <div class="editor-field"><input class="text-box single-line" data-val="true" data-val-required="Informe um valor para Fun&amp;#231;&amp;#227;o" id="Title" name="Title" type="text" value="" /> <span class="field-validation-valid" data-valmsg-for="Title" data-valmsg-replace="true"></span></div>
    <div class="editor-label"><label for="Description">Descri&#231;&#227;o</label></div>
    <div class="editor-field"><input class="text-box single-line" data-val="true" data-val-required="Informe um valor para Descri&amp;#231;&amp;#227;o" id="Description" name="Description" type="text" value="" /> <span class="field-validation-valid" data-valmsg-for="Description" data-valmsg-replace="true"></span></div>
<input type="submit" value="Send" />
</form>

1 Ответ

1 голос
/ 16 июня 2011

Понял!Проблема была в плохом маршруте, который создавал новую модель каждый раз.

Изменено

routes.MapRoute(
    "Add", // Route name
    "AnnounceJob", // URL with parameters
    new { controller = "Jobs", action = "Add", job = new Models.EditViewModel() } // Parameter defaults
);

На

routes.MapRoute(
    "Add", // Route name
    "AnnounceJob", // URL with parameters
    new { controller = "Jobs", action = "Add", job = UrlParameter.Optional } // Parameter defaults
);
...