Mam problem z moją aplikacją, źle próbuję wyjaśnić za pomocą przykładu, mam formularz, ta forma istnieje z kilkoma polami tekstowymi i listami rozwijanymi. Do ponownego użycia scaliłem 3 rozwijane listy w częściowy widok, ten częściowy widok ładowałem z @ Html.Action, to działa dobrze, kiedy zaczynam formularz widzę wszystko tak, jak powinno być, chociaż nie wiem dlaczego, ale wymagane rozwijane listy są wyświetlane z czerwonym początkiem i mówi, że są wymagane pola.Właściwość modelu MVC 3 nie jest ustawiona w widoku częściowym wywołanym przez html.action
Ale kiedy wszystko wypełnia, a ja wybieram wartości z rozwijanych list, i klikam OK, wartości z rozwijanych list są NULL.
myślę będzie bardziej comprehendable z przykładu kodu:
główna modelu:
public class FormModel
{
[Required]
public string UserName { get; set; }
[Required]
[Display(Name = "Birthdate")]
public DateTime? Birthdate { get; set; }
//This is what i'm talking about, that is not being set, the location
public Location Location { get; set; }
}
Oto klasa lokalizacja, który jest następnie przekazywany do częściowym widokiem i normalnie myślę, że powinno być zestaw, wygląda to tak:
public class Location
{
[Required]
[Display(Name = "Country")]
public string CountryId { get; set; }
[Required]
[Display(Name = "Region")]
public string RegionId { get; set; }
[Required]
[Display(Name = "City")]
public string CityId { get; set; }
}
teraz mamy częściowy widok na miejscu:
@model TestWebsite.Models.Location
<tr>
<td class="editor-label">
@Html.LabelFor(m => m.CountryId)
</td>
<td class="editor-field">
@Html.DropDownListFor(m => m.CountryId, Model.Countries, "---select--", null)
</td>
<td>
@Html.ValidationMessageFor(m => m.CountryId)
</td>
</tr>
<!-- Region -->
<tr>
<td class="editor-label">
@Html.LabelFor(m => m.RegionId)
</td>
<td class="editor-field">
@Html.DropDownListFor(m => m.RegionId, Enumerable.Empty<SelectListItem>(), "---select--", null)
</td>
<td>
@Html.ValidationMessageFor(m => m.RegionId)
</td>
</tr>
<!-- City -->
<tr>
<td class="editor-label">
@Html.LabelFor(m => m.CityId)
</td>
<td class="editor-field">
@Html.DropDownListFor(m => m.CityId, Enumerable.Empty<SelectListItem>(), "---select--", null)
</td>
<td>
@Html.ValidationMessageFor(m => m.CityId)
</td>
</tr>
Wtedy nazywamy to częściowy widok w formach tak:
@Html.Action("LocationGroup", "Account", Model.Location)
i wreszcie w kontrolerze:
[ChildActionOnly]
public ActionResult LocationGroup(Location model)
{
model.Countries = GetCountries();
return PartialView("_LocationView", model);
}
wiem, że jest dużo kodu, ale mam nadzieję, że może mi pomóc ...
** Ale kiedy wypełnić wszystko, a ja wybrać wartości z rozwijanej listy i kliknięciu OK, wartości z rozwijane listy mają wartość NULL. ** Czy próbowałeś przesłać formularze za pomocą 'JQuery/JSON' lub próbowałeś ustawić zawartość formularza przez zawijanie' Ajax.Begin'? – wwcdwdcw
Czy możesz sprawdzić nazwy właściwości, które są wysyłane do serwera (na przykład przez Firebug) Założę się, że nazwy odpowiadające częściowemu widokowi nie pasują do modelu w formie nazwy. Więc mvc nie może do wiązania. – Vic