2017-11-20 7 views
-1

私はMVC 5とEF6でとても新しいので、助けてください。MVC 5で私の注入されたクラスから値を取得する方法

私は2つのクラスと1つのビューを持っていますが、私はクラスPersonの値を取得できますが、クラスAddressは常にnullです。

私はPersonControllerに/

私のクラスの作成に使用するコンストラクタとバインドを試してみました:これは私の3日間の痛み:(

+0

ビューを表示する(バインドされていないと明らかに間違っています) –

+0

私はこれを試します:https://stackoverflow.com/questions/5550627/two-models-in-one-view-in-asp-mvc- 3 – user3062

+0

あなたのケースでは狂っているでしょう - あなたの 'Person'モデルは' Address'のためのプロパティを既に含んでいますので、あなたが正しく表示されていれば表示してもらえませんでした。 'あなたはあなたに' Address address'パラメータを指定する必要はありません。 –

答えて

0

Iドンである

public partial class Person 
{ 
    [Key] 
    public int PersonID { get; set; } 
    [Required] 
    [StringLength(40)] 
    public string Name { get; set; } 
    [StringLength(40)] 
    public string Email { get; set; } 
    public virtual Address AddressDI { get; set; } 
} 

public class Address 
{ 
    [Key] 
    public int AddressID { get; set; } 
    [Required] 
    public string City { get; set; } 
    [Required] 
    public string Street { get; set; } 
    [Required] 
    public virtual Person PersonDI { get; set; } 
} 

コントローラ

public class ContatoController : Controller 
{ 
    private readonly Address _address; 

    public PersonController() 
    { 
     _address = new Address(); 
    } 

    HttpPost] 
    ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = @"Name,Email,AddressID,City,")] Person person, Address address) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Person.Add(person); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(person); 
    } 

    /* Other Actions and stuffs */ 
} 

をあなたがここで達成しようとしていることを正確に知っていません。人物を投稿:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create(Person person) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Person.Add(person); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(person); 
} 

との見解では、のようなもの:

@model Partner 
@Html.BeginForm("Create","Contato", FormMethod.Post){ 
    @Html.TextboxFor(p => Model.AddressDI.City) 
} 

はまた、のviewmodelsと呼ばれるラッパークラスにコントローラアクション間でデータを送信するのが一般的です。 ViewModelsには通常、ビューの特定の瞬間に投稿または表示する必要があるすべてのものと、ビューの潜在的なパラメータが含まれます。以下のような

何か:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create(ContatoViewModel viewModel) 
{ 
    var person = new Person(); 
    person.Name = viewModel.Name; 
    person.Email = viewModel.Email; 
    person.AddressDI = viewModel.AddressDI 

    if (ModelState.IsValid) 
    { 
     db.Person.Add(person); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(viewModel); 
} 

正直私はあなたのビューでやっていることを見ることなくより多くを語ることはできません。

詳細はMVVMパターンに:https://msdn.microsoft.com/en-us/library/hh848246.aspx

ビューモデルとクラス間の値をコピーして助けるようにジミー・ボガードのAutoMapperとして利用可能なツールがあります。

+0

はい、今はViewModelを使用していて、ヘルプに100%感謝しています。 – user3062

関連する問題