我在MVC中创建了一个简单的页面,它是在MVC的启动项目中通过.net框架给出的,稍作修改。
我创建了两个模型
创建两个控制器。
然后我使用它们在我的主页上显示(比如facebook就是一个例子)
型号代码: 登录模型:
public class Login
{
private string email;
[Required]
public string Email
{
get { return email; }
set { email = value; }
}
private string password;
[Required]
public string Password
{
get { return password; }
set { password = value; }
}
}
注册模型
public class Register
{
private string email;
[Required]
public string Email
{
get { return email; }
set { email = value; }
}
private string password;
[Required]
public string Password
{
get { return password; }
set { password = value; }
}
private string name;
[Required]
public string Name
{
get { return name; }
set { name = value; }
}
}
登录和注册视图均使用“创建”选项创建。 两者都包含
<input type="submit" value="Create" />
现在,这两个视图都在我的另一页主页上。
@Html.Action("Index", "Login")
@Html.Action("Index", "Register")
两者都显示没问题,但是当我点击任意一个视图的任何“创建”按钮时,它也会在控制器中触发另一个视图中的事件。
我的控制器代码.... Logincontroller。
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(Login lgobj)
{
System.Threading.Thread.Sleep(2000);
string email = lgobj.Email;
string password = lgobj.Password;
return View();
}
RegisterController:
[HttpGet]
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(Register model)
{
return View();
}
有人可以说明我的代码中的原因或缺少的内容吗?
如果不清楚,请告诉我,我会详细说明。
答案 0 :(得分:1)
尝试将主视图更改为:
@using (Html.BeginForm())
{
@Html.Action("Index", "Login")
}
@using (Html.BeginForm())
{
@Html.Action("Index", "Register")
}
我认为发生的事情是你的提交正在向错误的控制者调用POST
,因为形式没有明显区别。
答案 1 :(得分:0)
好的,你有一个显示两个ActionLink的页面(一个视图)。单击后,这两个ActionLink会将您带到LoginController或RegisterController(取决于您单击的链接)。在这两种情况下,你最终都在适当的Controller的Index()ActionResult内...到目前为止一直都很好!
现在......一旦进入Index(),你只需调用return View()但是我没有看到任何代码显示这些视图是强类型的!请尝试以下方法:
的LoginController:
public ActionResult Index()
{
var model = new Login();
return View(model);
}
RegisterController:
public ActionResult Index()
{
var model = new Register();
return View(model);
}
假设您已经创建了两个强类型视图(Login文件夹中的Index.cshtml和Register文件夹中的Index.cshtml),请确保每个视图都有适当的表单和提交按钮。
答案 2 :(得分:0)
@Shark提到的内容几乎没有变化,
我们需要提及单个表单将发布数据的动作和控制器,如果我们不指定这两个表单将发布到页面URL。
@using (Html.BeginForm("Index","Login"))
{
@Html.Action("Index", "Login")
}
@using (Html.BeginForm("Index","Register"))
{
@Html.Action("Index", "Register")
}
答案 3 :(得分:0)
在这种情况下,(在我的第一个答案中评论)
我们需要使用动态视图页面。 (More Information) 请遵循以下步骤:
创建DynamicViewPage类型:
公共类DynamicViewPage:ViewPage
{
public new dynamic Model {get;私人集; }
protected override void SetViewData(ViewDataDictionary viewData)
{
base.SetViewData(可视数据);
Model = ViewData.Model;
}
}
您的控制器看起来像
public ActionResult Account(string returnUrl) { LoginModel loginmodel = null; //初始化模型; RegistrationModel registrationModel = null; //初始化模型; 。 。 。 。
return View("Account", new
{
Login = loginmodel,
Register = registrationModel
});
您的视图应该继承自
继承=&#34; DynamicViewPage&#34;
现在@ Model.Login将为您提供Loginmodel
@ Model.Register将为您提供RegisterModel
它应该按预期工作.........