私は自分のASP.NETプロジェクトに由来する独自のログインフレームワークを実装しようとしており、現在はASP.NET MVCに移行しようとしています。MVCログインフォーム - リソースが見つかりません
問題
たび私はCommunityBar.cshtml
で送信ボタンをクリックして、私はにリダイレクトしています:
localhost/Home/Login?Length=4
と受信
resource not found error
が、私たちの便利な友人、グーグル、私と一緒に、この問題の最後の数時間を過ごしましたまだ解決策を見つけていない。だから私はここの誰かが手伝ってくれることを望んでいた。
次にコードの束:
RouteConfig.cs
// POST home/login
routes.MapRoute(
name: "Login",
url: "Home/Login/{model}/{returnUrl}",
defaults: new { controller = "Home", action = "Login" }
);
CommunityBar.cshtml
@using (Html.BeginForm("Login", "Home", new {ReturnUrl = ViewBag.ReturnUrl}, FormMethod.Post, new {role = "form"}))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new {@class = "danger"})
@Html.TextBoxFor(m => m.LoginUsername, new {@class = "form-input", @placeholder = "Username"})
@Html.ValidationMessageFor(m => m.LoginUsername, "", new {@class = "danger"})
@Html.TextBoxFor(m => m.LoginPassword, new {@class = "form-input", @placeholder = "Password"})
@Html.ValidationMessageFor(m => m.LoginPassword, "", new {@class = "danger"})
@Html.ActionLink("Sign In", "Login", "Home", new {@class = "form-btn"})
}
HomeController.cs
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(UserViewData model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
return Content("test");
//return RedirectToLocal(returnUrl);
}
UserViewDataモデル
public class UserViewData
{
[Required]
[DataType(DataType.Text)]
public string LoginUsername { get; set; }
[Required]
[DataType(DataType.Password)]
public string LoginPassword { get; set; }
public MembershipUser User { get; private set; }
public bool HasMessages { get; private set; }
public List<MembershipUserPrivateMessage> Messages { get; private set; }
public bool HasNotifications { get; private set; }
public List<Subscription> Subscriptions { get; private set; }
public UserViewData(MembershipUser user)
{
UserService userService = new UserService();
this.User = user;
this.HasMessages = userService.CountUnreadPrivateMessages() > 0;
this.Messages = userService.GetPrivateMessages(false).Where(p => !p.IsRead).Take(5).ToList();
this.HasNotifications = false;
this.Subscriptions = null;
}
}
EDIT:一つの可能な解決策は、POCO構造に
RouteConfig.cs
// POST home/login
routes.MapRoute(
name: "Login",
url: "Home/Login/",
defaults: new { controller = "Home", action = "Login" }
);
CommunityBar.cshtml
を避けるためです@using (Html.BeginForm("Login", "Home", FormMethod.Post))
{
@Html.AntiForgeryToken()
<input type="text" name="username" class="form-input" placeholder="Username"/>
<input type="text" name="password" class="form-input" placeholder="Username"/>
<input type="submit" value="Sign In"/>
}
HomeController.cs
// POST: /Home/Login
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(string username, string password)
{
if (!ModelState.IsValid)
{
return Content("fail");
}
return Content("success" + username + password);
}
これは本当に実際のソリューションよりも、問題を隠すためだけの方法であると私は個人的に、これを好きではありません。だから、誰かが元のコードで問題が何であるかを考えれば、私はこの問題を生き生きとしていきます。または私は...
@Div上のモデルを渡していることを確認する必要があり、おそらく私はルートなしで試してみましたことを、言及している必要があります。失敗... –
あなたのルートには、あなたのURLに提供されていないような{model}パラメータがあります。ルートから{model}を削除し、それが役立つかどうか確認してください。 – Vahid
@Vahid、残念ながら同じ結果です。 –