【问题标题】:Data Validation in Partial view mvc 4?部分视图 mvc 4 中的数据验证?
【发布时间】:2014-03-19 07:53:27
【问题描述】:

我在 MVC 4 中工作,对它完全陌生。我在共享文件夹下有两个部分视图,在索引方法中我使用此代码来显示这些部分视图:

@Html.Partial("_Login")
@Html.Partial("_Register")

_Login 部分视图代码:

<script src="~/Scripts/jquery-1.7.1.min.js"></script>
<link href="~/Content/StyleSheet1.css" rel="stylesheet" />

@using (
Ajax.BeginForm(
"Index", "Partial" ,
    new AjaxOptions()
      {
        UpdateTargetId="LoginClass",
        HttpMethod="Post"
      }
) 
)

{
<div class="loginform">
@Html.Label("Name")
<div>@Html.TextBox("Name")</div>

@Html.Label("Password")
<div>@Html.TextBox("password")</div>
</div>

<div>
    <input type="submit" value="submit" />
</div>

}

LoginClass 代码:

namespace PartialViews.Models
{
public class LoginClass
{
    [Required(ErrorMessage="Required")]
    public string Name { get; set; }

    [Required]
    public string Password { get; set; }  
}
}

用于登录的控制器操作:

    [HttpGet]
    public ActionResult Index()
    {
        var lc = new LoginClass();
        return View(lc);
    }

    [HttpPost]
    public string Index(LoginClass lc)
    {
        return "Email: " + lc.Name + "</br>" +"Password:" + lc.Password;
    }

但验证不起作用!我需要做些什么才能使验证工作。

需要帮助,提前致谢。

【问题讨论】:

  • 同时发布您的控制器操作
  • 并检查是否必须在主布局中包含不显眼的 ajax js 文件和不显眼的验证 js 文件?
  • 使用控制器操作更新
  • 您可以在这里找到解决方案:stackoverflow.com/questions/14134949/…

标签: asp.net-mvc asp.net-mvc-4 partial-views data-annotations


【解决方案1】:

做这样的事情:

    [HttpPost]
    public string Index(LoginClass lc)
    {
if(ModelState.IsValid)
{
        return "Email: " + lc.Name + "</br>" +"Password:" + lc.Password;
}
else
{
 return PartialView("yourview",lc);
}
}

在视野中:

<div id="formContainer">
    @using (
    Ajax.BeginForm(
    "Index", "Partial" ,
        new AjaxOptions()
          {
            UpdateTargetId="LoginClass",
            HttpMethod="Post",
            InsertionMode = "Replace"
          }
    ) 
    )

    {
    @Html.ValidationSummary(true)
    <div class="loginform">
    @Html.Label("Name")
    <div>@Html.TextBoxFor(x=>x.Name)</div>
    <div>@Html.ValidationMessageFor(x=>x.Name)</div>
    @Html.Label("Password")
    <div>@Html.TextBox(x=>x.password)</div>
    <div>@Html.ValidationMessageFor(x-=>x.password)</div>
    </div>

    <div>
        <input type="submit" value="submit" />
    </div>

    }
</div>

在视图集模型的顶部,这样的视图:

@model LoginClass

更新 2:

创建登录表单作为局部视图:

@using (
        Ajax.BeginForm(
        "Index", "Partial" ,
            new AjaxOptions()
              {
                UpdateTargetId="formContainer",
                HttpMethod="Post",
                InsertionMode = "Replace"
              }
        ) 
        )

        {
        @Html.ValidationSummary(true)
        <div class="loginform">
        @Html.Label("Name")
        <div>@Html.TextBoxFor(x=>x.Name)</div>
        <div>@Html.ValidationMessageFor(x=>x.Name)</div>
        @Html.Label("Password")
        <div>@Html.TextBox(x=>x.password)</div>
        <div>@Html.ValidationMessageFor(x-=>x.password)</div>
        </div>

        <div>
            <input type="submit" value="submit" />
        </div>

        }

在容器 div 内的主视图中加载它:

<div id="formContainer">
// Load you login form here as partial view
</div>

现在你的行动:

[HttpPost]
  public string Index(LoginClass lc)
  {
   if(ModelState.IsValid)
     {
        // do anything here if valid data
     }
   else
     {
// data not valid 
 return PartialView("partialviewlogin",lc);
     }
    }

【讨论】:

  • 如果我想在文本框前面的同一个表单上显示一些验证消息怎么办?
  • +1 这么多,但我的问题还没有解决,你正在使用 return PartialView("yourview",lc);它将用户重定向到不同的页面,仅在登录视图中,但在我的情况下,我希望用户留在同一页面上。
  • 如果你想触发验证并且你必须检查模型是否有效,如果无效你必须返回作为模型传递的部分视图,然后它会工作,我更新让它更容易理解的答案
  • @Mogli 查看更新 2 我希望你能理解如何做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
相关资源
最近更新 更多