私はMVCを初めて使用し、既存のサイトをMVC4に移植しようとしたときにこの問題が発生しました。
データの多くがサービス呼び出しによって入力されるモデルを使用しているため、呼び出しを最小限に抑えたいことは明らかです。問題は、モデルをコントローラーに戻そうとすると、モデル内の複雑なオブジェクトが常にnullになることです。ajaxを使用して、コントローラーへのコールバックでデータを永続化することができました。ただし、新しいビューを返すためのアクションが必要であり、アクションが完了すると、ビューのコードが実行されますが、リダイレクトはありません(これは、ajaxのポイントであると私は信じています。私が求めているのは、同じ方法でデータを永続化するが、実際にはリダイレクトするソリューション)。
これが私のモデルです:
public class DistributionModel
{
public string typeOfDistribution { get; set; }
public Document document { get; set; }
public string thumbnailUrl { get; set; }
public MergeFieldModel mergeFields { get; set; }
}
public class MergeFieldModel
{
public MergeFields documentMergeFields { get; set; }
}
これが私が使用しているコントローラーアクションです:
public ActionResult Index(DistributionModel distributionModel)
{
distributionModel.mergeFields = new MergeFieldModel() { documentMergeFields = MergeFieldsHelper.GetDocumentMergeFields(distributionModel.document.Id) };
return View("Index", distributionModel);
}
下のブロックのボタンの代わりにhref=@Url.Action("Index"、Model)を使用してコントローラーを呼び出し、リダイレクトを実行しようとしました(リダイレクト自体は機能しましたが、その後、内で別のサービス呼び出しを実行する必要がありましたモデル内のDocumentオブジェクトがコントローラーにNULLとして返され続けたため、コントローラーは、呼び出し元のビューから操作していたのと同じドキュメントを取得します。
これがコントローラーを呼び出して実際に完全なモデルを返すビューの部分です:私が探しているのは、配布/インデックスページへのリダイレクトを取得できるようにajaxなしでこれを達成する方法だと思います(これはDistribution / DocumentDetailsページから起動)
<button id="EmailDistribution" data-corners="false" data-theme="a">EMAIL</button>
$('#EmailDistribution').click(function () {
var model = @Html.Raw(Json.Encode(Model));
$.ajax({
url: '@Url.Action("Index", "Distribution")',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(model),
processData: false,
});
});
おかげで、どんな助けでも大歓迎です。