Вы можете легко добавить скрытое поле с названием компании на form
.Его данные будут собраны и отправлены вашему действию POST, как и ожидалось.
Если вы вообще не используете название компании на стороне сервера, вы можете заполнить это скрытое поле любым фиктивным текстом, еслиИдентификатор компании правильный (потому что вы его используете).Но если вам нужно правильное название компании с вашим идентификатором, вам нужно будет ввести фактическое имя в скрытое поле вместо какого-то фиктивного текста.
В любом случае.Это добавит скрытое поле для названия вашей компании
<%= Html.HiddenFor(m => m.Company.Name) %>
, и если у вас не установлено свойство вашей компании, тогда вы также можете использовать это:
<%= Html.Hidden("Company.Name", "Super duper company") %>
Является ли это значение действительным именем или фиктивным именем, это не имеет значения.Ваша модель будет действительна при обратной передаче.
Обычная обратная передача или Ajax?
Я полагаю, вы используете обычную обратную передачу, а не обратную передачу Ajax.Если вы используете Ajax one и используете jQuery и вызываете $.post()
или $.ajax()
или что-то подобное, вы всегда можете предоставить любой объект, который вам нравится.Вы можете заполнить любое значение для названия компании в своем коде JavaScript.
Если у вас есть сложные объекты в JavaScript и вы хотите отправить их в действие вашего контроллера с параметрами строгого типа (чтобы они были проверены), вы можетеиспользуйте мой маленький плагин jQuery , который подготавливает любой объект JSON для правильной отправки в действие Asp.net MVC, чтобы данные автоматически связывались с вашими сильными типами для проверки.У JavaScript тоже есть даты.:)
Дополнительная информация
Поскольку вы указали (в комментарии), что ваши сущности очень много работают, и вы можете добавлять / удалять обязательные поля, это может быть очень утомительно длятакже измените все связанные представления.
Тем не менее, есть несколько способов сделать вашу жизнь немного проще, когда дело доходит до сменных моделей и различных сценариев проверки в зависимости от состояния объекта:
Имеют отдельные модели представления для процесса создания, которые также включают функции автоматического преобразования в класс модели приложения:
public class LocationCreate
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public int CompanyId { get; set; }
public Location ToModelInstance()
{
return new Location {
Id = this.Id,
Name = this.Name,
Company = new Company {
Id = this.CompanyId,
Name = "Super duper company Ltd." // you can as well omit this line
}
};
}
}
Использование наследования:
public class CompanyBase
{
public int Id { get; set; }
}
public class Company : CompanyBase
{
[Required]
public string Name { get; set; }
public virtual ICollection<Location> Locations { get; set; }
}
public class Location
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public virtual CompanyBase Company { get; set; }
}