私は、フォルダへのパス全体をfolder_name
sthというフォルダに保存したデータベースを持っています。 //MainFolder/subFolder/folderName
のようになります。私のアプリケーションでは、dbというフォルダを表すFolder
というモデルがあります。カスタムゲッター/セッターを使った[NotMapped]プロパティのアクセス
モデル:それは全体のパスからのみのサブストリングであるため、
public class Folder
{
[Key]
public string folder_name { get; set; }
[NotMapped]
public string folder_name_short
{
get
{
string shortname = folder_name.Substring(folder_name.LastIndexOf("/"), folder_name.Length - folder_name.LastIndexOf("/")); //System.NullReferenceException here
return shortname;
}
set
{
string shortname = folder_name.Substring(folder_name.LastIndexOf("/"), folder_name.Length - folder_name.LastIndexOf("/"));
this.folder_name = folder_name.Replace(shortname, value);
}
}
}
folder_name_short
マッピングされていないので、私は二回、それを保存する必要はありません。たとえば、次のような意味があります。
Console.WriteLine(folder_name) output://MainFolder/subFolder/folderName
Console.WriteLine(folder_name_short) output:/folderName
私のビューでは、ユーザーはフォルダの名前を変更できます。だから私は、新しい文字列を新しいものに古いfolder_name_short
を交換して保存したいfolder_name
ビュー:
.
.
using (Html.BeginForm("Rename", "Folders", FormMethod.Post))
{
@Html.EditorFor(model => model.folder_name_short)
<input type="submit" value="rename folder" id="submit" class="btn btn-default" />
}
.
.
問題:Inputtextboxはレンダリングとfolder_name_short
の現在の値を示して その中に。変更して送信ボタンをクリックすると、モデルにSystem.NullReferenceException
が表示されます(ソースコードにマークされていますので、右にスクロールしてください)。私は、何が間違っていて、何が変わるのかを理解していません。
編集:
セッターが例外が消え、コメントアウトされています。だから、設定者がエラーを引き起こしているのでしょうか?
ソリューション:
folder_name_short
値を格納するための標準的なセッターとゲッターを使用していますが、DBにfolder_name
を設定し、コントローラでこのメソッドを呼び出すための公共のget/setメソッドを実装します。だから、:
[NotMapped]
public string folder_name_short { get; set; }
public string getfolder_name_short()
{
string shortname = folder_name.Substring(folder_name.LastIndexOf("/"), folder_name.Length - folder_name.LastIndexOf("/"));
return shortname;
}
public void setfolder_name_short(string newname)
{
string shortname = folder_name.Substring(folder_name.LastIndexOf("/"), folder_name.Length - folder_name.LastIndexOf("/"));
folder_name = folder_name.Replace(shortname, newname);
}
あなたはFolderオブジェクトをデータベースから移入されていることを確認されており、また、フォルダ名が後に提出nullでないを理解するために、このスレッドをrecommandでしょうか? – TSungur
はい、folder_name_shortの現在の値はimputboxに表示されます。 –
私はあなたが例外ラインに来る直前に(あなたはその行にブレークポイントを置くことができます)、ページを提出することを意味します。folder_nameプロパティを見てください。 – TSungur