【问题标题】:Issue with multiple views on single view单个视图上的多个视图问题
【发布时间】:2012-01-16 13:21:38
【问题描述】:

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

我创建了两个模型

  1. 登录
  2. 注册

创建两个控制器。

  1. 登录控制器
  2. 注册控制器。

然后我使用它们都显示在我的主页上(就像 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")

两者都显示正常,但是当我单击任何视图的任何“创建”按钮时,它也会触发另一个控制器中的事件。

我的控制器代码....登录控制器。

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();
    }

注册控制器:

  [HttpGet]
    public ActionResult Index()
    {
        return View();


    }

    [HttpPost]
    public ActionResult Index(Register model)
    {
        return View();
    }

谁能说明原因,或者我的代码中缺少什么?

如果不清楚,请告诉我,我会详细描述。

【问题讨论】:

  • 你能发布你的主页视图吗?
  • 您可以发布您的整个主页视图吗?我知道你的ActionLinks 在哪里,但我想查看整个视图。
  • 已经提到了,上面只提到了两行。 @Html.Action("索引", "登录") @Html.Action("索引", "注册")
  • 需要查看登录和注册视图。
  • 惊喜,还没有人遇到过这样的问题,可能是我的错误,但任何 MVC 的新开发人员,我想我都按照我的方式编写代码

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


【解决方案1】:

尝试将您的主页视图更改为:

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

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

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

【讨论】:

  • @amitpatel 您的主页视图生成的标记是什么? (运行您的应用程序,然后右键单击查看源代码)
【解决方案2】:

好的,这样您就有了一个显示两个 ActionLink 的页面(一个视图)。单击后,这两个 ActionLink 会将您带到 LoginController 或 RegisterController(取决于您单击的链接)。在这两种情况下,您最终都在相应控制器的 Index() ActionResult 中……到目前为止一切顺利!

现在……一旦在 Index() 中,您只需调用 return View() 但是我没有看到任何代码表明这些视图是强类型的!请尝试以下操作:

登录控制器:

public ActionResult Index() 
{ 
var model = new Login();
return View(model);
} 

注册控制器:

public ActionResult Index() 
{ 
var model = new Register();
return View(model);
} 

假设您创建了两个强类型视图(Login 文件夹中的 Index.cshtml 和 Register 文件夹中的 Index.cshtml),请确保每个视图都有适当的表单和提交按钮。

【讨论】:

  • 是的,两者都有单独的查看和提交按钮,比不工作。
【解决方案3】:

@Shark 提到的内容变化不大,

我们需要提到单个表单将发布数据的动作和控制器,如果我们不指定表单将发布到页面url。

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

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

【讨论】:

  • Manas,改变你建议的方式,问题是当页面再次渲染时点击“Craete”按钮后,它没有其他视图的细节。我的意思是当我点击登录按钮页面的“创建”时,回发后不再有“注册”视图。
  • 我现在明白了。在我的下一个答案中找到你的答案
【解决方案4】:

在这种情况下,(如我的第一个答案中所述)

我们需要使用动态视图页面。 (More Information) 请按照以下步骤操作:

  1. 创建 DynamicViewPage 类型:

    公共类 DynamicViewPage : ViewPage { 公共新动态模型{获取;私人套装; }
    受保护的覆盖无效 SetViewData(ViewDataDictionary viewData) { base.SetViewData(viewData); 模型 = ViewData.Model; } }

  2. 你的控制器看起来像

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

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

    Inherits="DynamicViewPage"

现在@Model.Login 将为您提供登录模型

@Model.Register 会给你RegisterModel

它应该可以按您的预期工作............

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多