在单个视图上发出多个视图的问题

时间:2012-01-16 13:21:39

标签: asp.net-mvc asp.net-mvc-3 razor

我在MVC中创建了一个简单的页面,它是在MVC的启动项目中通过.net框架给出的,稍作修改。

我创建了两个模型

  1. 登录
  2. 注册
  3. 创建两个控制器。

    1. 的LoginController
    2. RegisterController。
    3. 然后我使用它们在我的主页上显示(比如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();
          }
      

      有人可以说明我的代码中的原因或缺少的内容吗?

      如果不清楚,请告诉我,我会详细说明。

4 个答案:

答案 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) 请遵循以下步骤:

  1. 创建DynamicViewPage类型:

    公共类DynamicViewPage:ViewPage         {             public new dynamic Model {get;私人集; }
                protected override void SetViewData(ViewDataDictionary viewData)             {                 base.SetViewData(可视数据);                 Model = ViewData.Model;             }         }

  2. 您的控制器看起来像

    public ActionResult Account(string returnUrl)     {         LoginModel loginmodel = null; //初始化模型;         RegistrationModel registrationModel = null; //初始化模型;         。     。     。     。     

        return View("Account", new
        {
            Login = loginmodel,
            Register = registrationModel
    
        });
    
  3. 您的视图应该继承自

    继承=&#34; DynamicViewPage&#34;

  4. 现在@ Model.Login将为您提供Loginmodel

    @ Model.Register将为您提供RegisterModel

    它应该按预期工作.........

相关问题