Префикс: мне не нравится этот подход, я думаю, что атрибут Bind
неуклюж. Тем не менее, у меня есть сложная модель. Это вид бритвы ASP. NET MVC, который использует частичный вид.
В идеале я бы хотел, чтобы частичное представление принимало DTO, в котором есть только поля, которые я хотел бы связать. По причинам, которые я не могу контролировать, у меня нет такой возможности.
Однако у меня есть возможность модифицировать контроллер. Итак, я пытаюсь использовать атрибут Bind
, чтобы разрешить только те свойства дочернего элемента, которые я хотел бы связать.
Вот классы родительской и дочерней моделей:
public class Parent
{
public Menu FullMenu { get; set; }
public KidDTO SubDTO { get; set; }
}
public class KidDTO
{
public string Name { get; set;}
public string Date { get; set;}
public string Addr { get; set;}
}
Родительское представление Razor (опять же, я бы предпочел пропустить меньший DTO, который будет использоваться ... но я не есть такая опция):
@model Core.ViewModels.Parent
//Other stuff here
@{ Html.RenderPartial("_CreateEdit", Model);}
Вот дочернее представление:
@model Core.ViewModels.Parent
@using (Ajax.BeginForm("CreateEdit", "Child", new AjaxOptions { HttpMethod = "POST"}))
{
<div class="form-horizontal">
<hr />
<div class="form-group row">
<div class="col-md-10">
@Html.EditorFor(model => model.SubDTO.Name)
</div>
</div>
<input type="button" value="Submit" />
</div>
}
Контроллер:
[HttpPost]
public async Task<ActionResult> CreateEdit([Bind(Include="SubDTO.Name")] Parent model)
{
// check if its Null or Not
var IsItNull = model.SubDTO.Name; //<--model.SubDTO.Name is always Null. ?
return RedirectToAction($"{ControllerEntity}Manager");
}
Итак, вкратце, если я привязываюсь к SubDTO с помощью Если он имеет значения, но тогда он позволяет связываться с другими атрибутами SubModel, чего я пытаюсь избежать?