asp.net-mvc - asp net core 2.1 razor pages vs mvc




asp.net mvc에서 중첩 된 속성의 모델 바인딩 (2)

POST에서 전체보기 모델이 아닌 이름을 바인드하려면 접두사가 사용될 모델 바인더를 지시하십시오. 이 작업은 BindAttribute를 사용하여 수행됩니다.

public ActionResult AddComment([Bind(Prefix = "Name")] Name name)
{
  //do something
}

내 바인딩 응용 프로그램에서 작동하는 일부 바인딩 얻을 싶어요. 중첩 된 속성은 asp.net mvc의 RC1 릴리스에서 기본 모델 바인더에 의해 자동으로 바인딩되지 않습니다. 나는 다음과 같은 클래스 구조를 가지고있다 :

public class Contact{  
    public int Id { get; set; }  
    public Name Name { get; set; }  
    public string Email { get; set; }  
}

Name 은 다음과 같이 정의됩니다.

public class Name{  
    public string Forename { get; set; }  
    public string Surname { get; set; }  
}

내 견해는 다음 내용을 따라 정의됩니다.

using(Html.BeginForm()){  
    Html.Textbox("Name.Forename", Model.Name.Forename);  
    Html.Textbox("Name.Surname", Model.Name.Surname);  
    Html.Textbox("Email", Model.Email);  
    Html.SubmitButton("save", "Save");  
}

내 컨트롤러 동작은 다음과 같이 정의됩니다.

public ActionResult Save(int id, FormCollection submittedValues){  
    Contact contact = get contact from database;  
    UpdateModel(contact, submittedValues.ToValueProvider());  

    //at this point the Name property has not been successfully populated using the default model binder!!!
}

Email 속성은 성공적으로 바인딩되지만 Name.Forename 또는 Name.Surname 속성은 바인딩되지 않습니다. 아무도이 기본 모델 바인더를 사용하여 작동해야하고 내가 뭔가 잘못하고있는 경우 또는 작동하지 않는 및 모델 개체에 중첩 된 속성을 바인딩 할 내 자신의 코드를 롤백 할 필요가 말할 수 있습니까?


Thats는 매우 흥미 롭습니다.

public ActionResult Save( int id, Contact contact )
{
    //contact here would contain the nested values.
}

나는 이것을 큰 성공과 함께 사용하고있다. 두 Contact 객체를 어떻게 든 동기화 할 수 있다고 가정합니다.

나는 UpdateModel과 매개 변수에 대한 바인딩이 배후에서 같은 호출을 사용한다고 생각했을 것이다. 참고 : 문제를 재현하려하지 않았습니다.





asp.net-mvc