2017-02-26 2 views
0

Objekt ist mein Complex AnsichtsmodellASP.NET MVC Modell Complex in Binding Ansichtsmodell Hier

public class OperationStudyInputViewModel 
{ 
    public OperationStudy OperationStudy { get; set; } 
    public FileUpload FileUploads { get; set; } 
    public IEnumerable<string> Attachments { get; set; } 
    public IEnumerable<string> Folders { get; set; } 
} 

Hier ist das OperationStudy Modell

public class OperationStudy 
{ 
    public int OperationStudyId { get; set; } 
    public string SpCategoryId { get; set; } 
    //Here is some Other Properties 
} 

Hier ist die OperationStudyInput() Post-Methode

[HttpPost] 

public ActionResult OperationStudyInput([Bind(Exclude = "SpCategoryId")] OperationStudyInputViewModel inputViewModel, IEnumerable<HttpPostedFileBase> multiplefiles) 
{ 
    // some Necessary codes Here 
    _dbContext.OperationStudies.Add(inputViewModel.OperationStudy); 
    _dbContext.SaveChanges(); 
} 

I SpCategoryId Von OperationStudy in inputViewModel (inputViewModel.OperationStudy) in OperationStudyInput() Beitrag Mehtod ausschließen möchten. Ich habe es mit dem vorherigen Code versucht, aber es funktioniert nicht wie erwartet !!

Jede Hilfe bitte !!

+1

Ein Ansichtsmodell sollte kein Datenmodell enthalten. Erstellen Sie ein Ansichtsmodell für "OperationStudy" und lassen Sie die Eigenschaft "OperationStudyId" aus. (Und wenn Sie ein Ansichtsmodell verwenden, brauchen Sie nie ein '[Bind]' Attribut - das ist einer der vielen Gründe, warum Sie ein Ansichtsmodell verwenden. –

+0

Ja! Ich kann das aber Ist es möglich, was ich hier wollte? – TanvirArjel

+1

Ja, aber es ist eine furchtbare Übung, also bedenkt es nicht - '[Bind (Exclude =" OperationStudy.SpCategoryId ")]' –

Antwort

1

Ich würde empfehlen, zwischen Ansichtsmodellen und Datenmodellen zu unterscheiden, die Sie haben. Wenn Sie direkt zurückkehren, kann dies zu unerwarteten Sicherheitsproblemen führen (das plötzliche Hinzufügen eines Feldes im Backend führt dazu, dass dieses Feld dem Web ausgesetzt wird). Also, was ich tun würde, ist eine Reihe von Web-Modellen, die Sie mit Web, z. und führen Sie jedes Mal eine Zuordnung durch, wenn Sie sie zurückgeben müssen.

Dies sorgt für eine gute Trennung zwischen Ihrer Ansicht und BI-Schichten. Um dies zu erreichen, können Sie Frameworks wie AutoMapper verwenden. Es ist nicht notwendig, aber hilft Ihnen beim Crud-Mapping.

Sie denken vielleicht, dass dies ein Overkill ist, aber vertrauen Sie mir, Sie werden Vorteile dieses Ansatzes auf lange Sicht sehen. Sie können mehr über Google auch über das Thema Trennung suchen.

P.S. Ich würde keine Hacks vorschlagen mit dem Entfernen der Daten aus dem Modell, wie in anderen Posts vorgeschlagen. Das erscheint mir sehr fragil.

0

Sie können die Bind-Attribut über die Klasse wie folgt angeben:

[Bind(Exclude = "SpCategoryId")] 
public class OperationStudy 
{ 
    public int OperationStudyId { get; set; } 
    public string SpCategoryId { get; set; } 
} 

Aber, würde ich empfehlen, für die Bindung separaten Ansichtsmodell zu erstellen und zu verwenden.