2017-04-25 9 views
0

初心者の質問 - 私はHomeController、HomeModelおよびHomeViewを持っています。ユーザーがhttp://page/Homeページに来ると、Indexメソッドが実行され、コントロールを入力できます。彼がボタンをクリックすると(ポストバック)、プロセスアクションが実行され、エラーの場合、アプリケーションはModelState.AddModelErrorメソッドを呼び出します。その後、Indexアクションが再度呼び出され、ページにエラーが表示されます。新しいビューを返すときにURLを保持する方法

これは問題ありませんが、ポストバック後に新しいURLはhttp://page/Homeの代わりにhttp://page/Home/Indexです。どのようにこれを防ぐためのアイデア?

PS - 私はthis解決策を試してみましたが、その後、新しいURLはhttp://page/Home?...long string of serialized ModelState data...

私のコントローラのようなものだった:

[HttpGet] 
public ActionResult Index(MyModel model) 
{ 
    return View(model); 
} 

[HttpPost] 
public ActionResult Process(MyModel model) 
{ 
    if (...error...) 
    { 
     model.SetErrorState(); 
     ModelState.AddModelError("ProcessError", "error message"); 
     return View("Index", model); 
    } 
    else 
    { 
     // do something... 
     model.SetSuccessState(); 
     return View("Index", model); 
    } 
} 

答えて

2

問題は、あなたがHttpPostアクションのための新しいURLにプッシュしているですが。これをあなたのHomeアクションのHttpPostバージョンに変更すると、エラーが発生してもURLが変更されずにページにきれいに戻ることができます。

[HttpGet] 
public ActionResult Index(ImportData model) 
{ 
    return View(model); 
} 

[HttpPost] 
public ActionResult Index(MyModel model, FormCollection data) 
{ 
    if (...error...) 
    { 
     model.SetErrorState(); 
     ModelState.AddModelError("ProcessError", "error message"); 
     return View(model); 
    } 
    else 
    { 
     // do something... 
     model.SetSuccessState(); 
     return View(model); 
    } 
} 
+0

私は間違いを犯しました。どちらの方法も、同じタイプの「MyModel」を持つ1つのパラメータが必要です。この問題を修正してソリューションを適用すると、「HomeControllerのタイプはすでに、同じパラメータタイプのIndexというメンバを定義しています」という文句を言います。 – sventevit

+0

@sventevitを更新しました:)(未使用の) 'FormCollection' varを追加して区別するだけです。 – scgough

+0

完璧、ありがとう:) – sventevit

関連する問題