0

次のようにオブジェクトを受け入れる ASP.NET MVC 3 コントローラー アクションがあります。

    //// model.ReferenceNumber equals "-1"
    public ActionResult EditApplication(EditApplicationViewModel model)
    {
        if (!ModelState.IsValid)
        {
                  ...
        }

        // Existing Applicant
        model.ReferenceNumber = "";
        var msg = this.RenderPartialViewToString("_ExistingApplication", model);
    }

リクエストが受信されると、「model.ReferenceNumber」は「-1」に等しくなります。モデルのプロパティを空の文字列 "" に設定した後でも、"RenderPartialViewToString" の結果は "input" HTML フィールドの "Value" プロパティに "-1" の値を示します。

なぜこれが起こっているのですか?

これは、部分ビューをレンダリングするために使用されるコードです: http://craftycodeblog.com/2010/05/15/asp-net-mvc-render-partial-view-to-string/

public static string RenderPartialViewToString(this Controller controller, string viewName, object model)
{
    if (string.IsNullOrEmpty(viewName))
        viewName = controller.ControllerContext.RouteData.GetRequiredString("action");

    controller.ViewData.Model = model;

    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
        var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
        viewResult.View.Render(viewContext, sw);

        return sw.GetStringBuilder().ToString();
    }
}

ありがとう

4

1 に答える 1

1

コントローラー qction で一部のモデル プロパティの値を変更する場合は、必ずモデル状態からも削除してください。

ModelState.Remove("ReferenceNumber");
model.ReferenceNumber = "new value";
var msg = this.RenderPartialViewToString("_ExistingApplication", model);
于 2012-05-10T09:33:47.980 に答える