2016-10-02 2 views
0

Ich habe ein Viewmodel, mit dem ich ein Geschäftssuche-Filterobjekt erstellen kann. Aus meiner Sicht erstelle ich einen Aktionslink wie folgt ...MVC 5 - Eigenschaft nicht serialisieren, wenn der Standardwert

@Html.ActionLink("Search Link", 
    actionName:="Index", 
    controllerName:="Jobs", 
    routeValues:=New MyFilterViewModel() With {.Field1 = "Some Value", .Field2 = "Some other value"}, htmlAttributes:=Nothing) 

Das funktioniert gut. Es serialisiert die Viewmodel-Eigenschaften als Querystring-Parameter, die dann von der Controller-Aktion gebunden werden.

Das Filteransichtsmodell hat eine Menge anderer Eigenschaften, von denen die meisten nicht relevant sind, aber sie sind immer noch in den URL-Parametern serialisiert, obwohl die meisten nicht festgelegt sind.

Gibt es eine Möglichkeit, die Modelview-Eigenschaften zu dekorieren, so dass sie nur dann serialisiert werden, wenn sie zugewiesen sind (kein Standardwert)?

Antwort

2

Sie könnten die DefaultHandling enum in [JsonProperty] Attribut verwenden. Dekoriere deine Eigenschaften likeso.
Beispiel:

[JsonProperty("MyProp", DefaultValueHandling = DefaultValueHandling.Ignore)] 
public string MyProp { get; set; } 
+0

Dies funktioniert für Json Serialisierung, aber nicht für URL-Parameter Serialisierung. – user1751825

+0

Vielleicht kann der gleiche Ansatz mit einem benutzerdefinierten Modelbinder implementiert werden? – Nsevens

+0

@Nsevens ja dies kann mit einem benutzerdefinierten Modellbinder getan werden. –

Verwandte Themen