2012-01-16 85 views
0

我已经在MVC中创建了一个简单的页面,MVC的启动项目是通过.net框架在稍微修改的情况下给出的。在单个视图上有多个视图的问题

我已经创建了两个模型

  1. 登录
  2. 注册

创建两个控制器。

  1. 的LoginController
  2. RegisterController。

那么我使用这两者在我的主页上显示(如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

你能张贴您的主页吗? – 2012-01-16 13:33:21

+0

你可以发布您的*整个*主页视图?我看到你的'ActionLink's在哪里,但是我希望看到整个视图。 – 2012-01-16 13:42:39

+0

已经提到,它只有上面提到的两行。 @ Html.Action(“Index”,“Login”)@ Html.Action(“Index”,“Register”) – 2012-01-16 13:44:07

回答

1

试着改变你的主页查看本:

@using (Html.BeginForm()) 
{ 
    @Html.Action("Index", "Login") 
} 

@using (Html.BeginForm()) 
{ 
    @Html.Action("Index", "Register") 
} 

我认为正在发生的事情是,你在提交调用POST到错误的控制器,因为有形式,没有明显的差异。

+0

我的猜测以及。 – Darthg8r 2012-01-16 13:58:27

+0

对不起,鲨鱼它还没有这样工作。 – 2012-01-17 05:36:26

+0

@amitpatel您的主页视图生成的标记是什么? (运行你的应用程序,并右键点击查看源代码) – 2012-01-17 05:39:59

0

好吧,你有一个页面(一个视图),显示两个ActionLinks。点击后,这两个ActionLink会将您带到LoginController或RegisterController(取决于您点击的链接)。在这两种情况下,你都会在相应控制器的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); 
} 

假设您已经创建了两个强类型的视图(Index.cshtml登录文件夹内,Index.cshtml登记册内文件夹)确保每个视图都有适当的表单和提交按钮。

+0

是的,两者都有独立的视图和提交按钮,不工作比。 – 2012-01-17 05:39:42

0

变化不大通过@Shark提到什么,

我们需要提及的动作和控制器,indivisual形式将张贴到的数据,如果我们不能同时指定表格将张贴到网页的URL。

@using (Html.BeginForm("Index","Login")) 
{ 
    @Html.Action("Index", "Login") 
} 

@using (Html.BeginForm("Index","Register")) 
{ 
    @Html.Action("Index", "Register") 
} 
+0

玛纳斯,改变你建议的方式,问题是当再次渲染页面时点击“Craete”按钮后,它没有其他视图的细节。我的意思是当我点击登录按钮页面的“创建”时,在回发之后不再有“注册”视图。 – 2012-01-17 05:37:50

+0

我现在明白了。在我的下一个答案中找到你的答案 – Manas 2012-01-17 06:20:17

0

在这种情况下,(在我的第一个答案评论)

我们需要使用动态视图页面。 (More Information) 遵循以下步骤:

  1. 创建DynamicViewPage类型:

    公共类DynamicViewPage:的ViewPage { 公众新的动态模式{获得;私人设置; }
    保护覆盖无效SetViewData(ViewDataDictionary viewData) { base.SetViewData(viewData); Model = ViewData.Model; }}

  2. 控制器会像

    公众的ActionResult帐户(字符串RETURNURL) { LoginModel loginmodel = NULL; //初始化模式; RegistrationModel registrationModel = null; //初始化模型; 。 。 。 。 。

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

    继承= “DynamicViewPage”

现在@ Model.Login会给你Loginmodel

@ Model.Register会给你继承RegisterModel

它应该像你期望的那样工作.........

相关问题