2017-08-02 14 views
0

私はMVCが新しく、次の問題を解決する方法に問題があります。編集フォームをさまざまなユーザーロールで更新する必要があります。各ユーザーが異なるフィールドを更新することを意味します。主な情報フィールド(material#、descriptionなど)を無効にし、編集可能なフィールドの下に表示したいと思います。ASP .NET MVC 5ロールおよび/またはステータスに応じてフォームを編集する

私はWebフォームのフィールドから来ています。私は過去にさまざまなWebユーザーコントロール(.ascx)を使用して解決しました。 1つはメインデータ用、2つ目は編集データ用です。ユーザーの役割とレコードのステータス(作成、要求、承認など)によっては、Webユーザーコントロールを動的に読み込みました。

2番目の問題:ユーザーロールごとに個別のインデックスページを作成する必要はありません。代わりに、ユーザーがフォームを編集しない場合(たとえば、ステータスが「要求済み」なので)、「編集」リンクを非表示にすることをおすすめします。 Webフォームでは、リストビューを使用してそれを解決し、ItemDataBound内でそれに応じてリンクを置き換えました。

このようなシナリオでMVCエリア内のベストプラクティスは何ですか?

+1

こんにちは。私たちのコミュニティの多くの女性は、ソフトウェアエンジニアに関する世俗的な前提を見るたびに、少し除外されているように感じています。私は、より歓迎的な環境のために、あなたの投稿に男性指向の挨拶と代名詞を追加することを避けることができますか?ありがとうございました。 – halfer

答えて

2

ウェブユーザーコントロールの代わりにPartial Viewsを使用できます。部分モデルごとに個別のViewModelを使用し、部分モデルからメインViewModelを構成します。

剃刀のマークアップで条件を確認し、それに応じて部分/リンクをレンダリングすることができます。例えば

public class ReadOnlyDataViewModel { 
    public DateTime CreationDate { get; set; } 
} 

public class EditableDataViewModel { 
    public string Name { get; set; } 
} 

public class MainViewModel { 
    public ReadOnlyDataViewModel ReadOnlyData { get; set; } 
    public EditableDataViewModel EditableData { get; set; } 
    public bool HasEditPermission { get; set; } 
} 

_ReadOnlyData.cshtml

@model ReadOnlyDataViewModel 
@Html.DisplayFor(m => m.CreationDate) 

_EditableData.cshtml

@model EditableDataViewModel 
@Html.EditorFor(m => m.Name) 

異なるパーシャルでも編集可能なデータを表示するには、たとえば、同じViewModelにを使用することができます読み取り専用:

_EditableDataReadOnly.cshtmlが

@model EditableDataViewModel 
@Html.DisplayFor(m => m.Name) 

Main.cshtml

@model MainViewModel 

@Html.Partial("_ReadOnlyData", Model.ReadOnlyData) 

@if (Model.HasEditPermisson) { 
    @Html.Partial("_EditableData", Model.EditableData) 
} 
else { 
    @Html.Partial("_EditableDataReadOnly", Model.EditableData) 
} 

@* Conditional link *@ 
@if (Model.HasEditPermisson) { 
    @Url.Action("Edit", "MyController") 
} 
+0

ゲオルグ、ありがとう。これは正しい方向に私を指している! – Nearshore

+0

喜んで:) –

0

MVCには、partial viewというものがあります。基本的に、それはあなたがどこにでも埋め込むことができる '部分的な'ビューを作成することができます。役割やステータスに応じて、異なる部分ビュー(ケースにフォームを含む部分ビュー)を埋め込むことができます。 ユーザーロールが管理者と等しい場合。 @{ Html.RenderPartial("_AdministratorEditForm"); }などがあります。

関連する問題