ИМХО есть лучший способ сделать это.
По существу, если у вас есть несколько моделей в модели представления, подпись постконтроллера будет содержать те же модели, что и модель представления.
I.E.
public class FooViewModel {
public Bar BarV { get; set; }
public Enquiry EnquiryV { get; set; }
public int ThisNumber { get; set; }
}
public class Bar {
public int BarId { get; set; }
}
public class Enquiry {
public int EnquiryId { get; set; }
public string Latitude { get; set; }
}
И последующее действие в контроллере будет выглядеть следующим образом.
[ActionName("Foo"), HttpPost]
public ActionResult Foo_post(
[Bind(Include = "EnquiryId")]
Enquiry EnquiryV,
[Bind(Include = "BarId"])]
Bar BarV,
int ThisNumber
{
return View(new FooViewModel { Bar = BarV, Enquiry = EnquiryV, ThisNumber = ThisNumber });
}
Все в то время как вид еще выглядит так
@using (Html.BeginForm()) {
@Html.TextBoxFor(m => m.EnquiryV.EnquiryId)
@Html.TextBoxFor(m => m.EnquiryV.Latitude)
@Html.TextBoxFor(m => m.BarV.BarId)
@Html.TextBoxFor(m => m.ThisNumber)
<input type="submit" value="push" />
}
Имейте в виду, эта форма все равно будет продолжать Локатору назад (как вы имели его настроить), однако, так как это не входит в строка Bind Include для запроса на действие post, действие не примет новое значение в результирующем запросе. Я бы предложил сделать широту либо отключенной, либо не элементом формы, чтобы предотвратить дополнительные данные проводки.
В любом другом сценарии вы можете использовать bind просто отлично, но по какой-то причине ему не нравятся точечные обозначения сложных моделей.
В качестве побочного примечания я бы не поместил атрибут bind непосредственно в класс, так как это может вызвать другие проблемы, такие как репликация кода, и не учитывает определенные сценарии, в которых вы можете захотеть иметь другую привязку.
(Я изменил имена переменных для некоторой ясности. Я также знаю, что ваш вопрос скорее устарел, однако, в поисках ответа сам, это первый, на котором я наткнулся, прежде чем пытаться использовать свои собственные решения и приближаться к одному. Я надеюсь, что это поможет другим людям найти решение по той же проблеме.)
Я думаю, что лучше всего сделать это, как описано в другом сообщении, на которое вы ссылаетесь. – JoJa
Да, похоже, так: я не могу сделать это в проекте модели домена. Я должен определить частичные классы внутри проекта mvc и сделать это там, я думаю. – tugberk
Попробуйте мое решение здесь https://stackoverflow.com/questions/47644699/how-to-bind-nested-objects-on-httppost-in-asp-net-mvc/47645228#47645228 –