首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >简单的MVC错误流

简单的MVC错误流
EN

Stack Overflow用户
提问于 2013-02-12 04:25:38
回答 1查看 66关注 0票数 1

我使用的是ASP MVC 4.0,我想了解自定义验证的基础知识。在这种特殊情况下,模型根本不是强类型的控制器或视图,所以我需要一些不同的类型。

我想要做的是在注册到我的服务时接受一个新的用户名,在数据库中查找,并在该用户名被使用的情况下重新显示原始表单。

这是我的输入表单:

代码语言:javascript
运行
复制
@{
    ViewBag.Title = "Index";
}

<h2>New account</h2>

<form action= "@Url.Action("submitNew", "AccountNew")" method="post">
    <table style="width: 100%;">
        <tr>
            <td>Email:</td>
            <td>&nbsp;</td>
            <td><input id="email" name="email" type="text" /></td>
        </tr>
        <tr>
            <td>Password:</td>
            <td>&nbsp;</td>
            <td><input id="password" name="password" type="password" /></td>
        </tr>
        <tr>
            <td>Confirm Password:</td>
            <td>&nbsp;</td>
            <td><input id="passwordConfirm" name="passwordConfirm" type="password" /></td>
        </tr>
        <tr>
            <td></td>
            <td>&nbsp;</td>
            <td><input id="Submit1" type="submit" value="submit" /></td>
        </tr>
    </table>
</form>

下面是我提交时的控制器方法:

代码语言:javascript
运行
复制
    public ActionResult submitNew()
        {
            SomeService service = (SomeService)Session["SomeService"];

            string username = Request["email"];
            string password = Request["password"];

            bool success = service.guestRegistration(username, password);

            return View();
        }

如果成功是假的,我只想用一条消息重新显示表单。我缺少这个错误流的基础知识。你能帮帮忙吗?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-02-12 04:30:31

您可以添加一个ViewBag项

代码语言:javascript
运行
复制
bool success = service.guestRegistration(username, password);
if (!success)
{
  ViewBag.Error = "Name taken..."
}
return View();

但是你应该创建一个视图模型...

代码语言:javascript
运行
复制
public class ViewModel
{
  public string UserName {get; set;}
  //...other properties
}

...strongly输入你的视图并使用内置的html助手...

代码语言:javascript
运行
复制
@model ViewModel
//...
@using BeginForm("SubmitNew", "AccountNew", FormMethod.Post)()
{
  //...
  <div>@Html.LabelFor(m => m.Username)</div>
  <div>@Html.TextBoxFor(m => m.Username)</div>
  <div>@Html.ValidationMessageFor(m => m.Username)</div>
}

...and在控制器中利用ModelState

代码语言:javascript
运行
复制
[HttpPost]
 public ActionResult SubmitNew(ViewModel viewModel)
 {
     if(ModelState.IsValid)
     {
       SomeService service = (SomeService)Session["SomeService"];
       bool success = service.guestRegistration(viewModel.username, viewModel.password);
       if (success)
       {
          return RedirectToAction("Index");
       }
       ModelState.AddModelError("", "Name taken...")"
       return View(viewModel);
     }
 }

...or甚至编写自己的验证器,只需修饰模型属性,就不需要在控制器中检查是否成功。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14820233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档