2017-08-08 5 views
0

私はASP.NET BeginFormヘルパーの問題に直面しています。ASP.NET HTML.BeginForm/Url.Action Urlが自身を指しています

私は/Project/Deleteを指している必要がありますフォームを作成しようと、私は、この目標を達成するために、次のstatemantを試してみました:

@using (Html.BeginForm("Delete", "Project")) 
{ 
} 

<form action="@Url.Action("Delete", "Project")"></form> 

しかし残念ながら、両方のレンダリングされたアクション・ポイントにサイトのURLと呼ばれている/Projects/Delete/LocalSqlServerへ私は本当にいけないブラウザ

<form action="/Project/Delete/LocalSqlServer" method="post"></form> 

は、それ自体にレンダリングされたアクションポイントの代わりに、与えられたroute.Iが既にSO Googleで(私が見つけた)すべての記事を読んで、なぜ知っているが、何の解決策を見つけていません。

これは、定義された唯一のルートである:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

そして、これは

[HttpGet] 
public ActionResult Delete(string id) 
{ 
    return View(new DeleteViewModel { Name = id }); 
} 

[HttpPost] 
public ActionResult Delete(DeleteViewModel model) 
{ 
    _configService.DeleteConnectionString(model); 
    return null; 
} 

私のコントローラです私は、.NET 4.6.2を使用しています。

本当にありがとうございます。

おかげ サンドロ

+0

私はちょっと前に似たようなものに遭遇しました。あなたにギターの問題が見つかるかどうかを確認します。 – nurdyguy

+0

あなたは私たちにショーアクションメソッドを表示できますか? – Win

+0

ルート定義と '[HttGet]'と '[httpPost]'の両方のメソッドを表示する必要があります –

答えて

1

真実はある、それはasp.netのバグですが、彼らは、バグとしてそれを認識し、単に「機能」それを呼び出すことを拒否。しかし、ここで

は...あなたはそれに対処する方法では、ここに私のコントローラは次のようになります。

// gets the form page 
[HttpGet, Route("testing/MyForm/{code}")] 
public IActionResult MyForm(string code) 
{ 
    return View(); 
} 

// process the form submit 
[HttpPost, Route("testing/MyForm")] 
public IActionResult MyForm(FormVM request) 
{ 
    // do stuff 
} 

だから私の場合には、codeはあなたがLocalSqlServerとなっているだけのように追加さになるだろう。ここで

はあなたが基本的なASPフォームを作成する方法の両方のバージョンです:私はasp-route-codeを入れ、停止中

@using(Html.BeginForm("myform", "testing", new {code = "" })) 
{ 
    <input type="text" value="123" /> 
} 


<form id="theId" asp-controller="testing" asp-action="myform" asp-route-id="" asp-route-code=""> 
    <input type="text" value="asdf" /> 

</form> 

、「コード」は、コントローラで変数を一致させる必要があります。 new {code = "" }と同じです。

希望すると便利です。

+0

このソリューションは完璧に動作します、ありがとうございます@nurdyguy。 –

関連する問題