数据库第一个MVC,对象没有填充

时间:2016-10-10 22:11:18

标签: asp.net-mvc entity-framework asp.net-mvc-5

我必须使用数据库第一种方法,解决方案有3个项目。 2是类库,第三是实际的MVC项目。一个类库有edmx设计器。另一个有不同的模型类。这两个库由MVC项目引用。我的问题是该对象没有填充值。我想这是某个地方的命名冲突。对象 tblRDBUser 未填充。数据库中有一个表具有相同的对象名。对象属性也匹配列名。我没有从视图中获取值到控制器。

项目一:

RDB.DataModel, it contains the EDMX designer.

项目二:RDB.Models

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RDB.DataModel;

public class Authenticate
{
    public string AuthenticateUser(tblRDBUser User)
    {
        Book_TradEntities users = new Book_TradEntities();
        return (from p in users.tblRDBUsers where p.UserName == User.UserName && p.Password == User.Password select p.UserName).FirstOrDefault();
    }

}

项目3:

查看:

@model RDB.DataModel.tblRDBUser

@{
    ViewBag.Title = "Index";
}
@Html.TextBoxFor(a => a.UserName)
@Html.TextBoxFor(a => a.Password)
@Html.ActionLink("Login", "Authenticate");

控制器:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using RDB.DataModel;
using RDB.Models;

namespace CignaRDB.Controllers
{
public class RDBWebController : Controller
{
    //
    // GET: /RDBWeb/
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Authenticate(tblRDBUser User)
    {
        if (ModelState.IsValid)
        {
            Authenticate user = new Authenticate();
            user.AuthenticateUser(User);
            return View();
        }
        return View();
    }
}
}

1 个答案:

答案 0 :(得分:2)

主要问题。你创建链接@Html.ActionLink("Login", "Authenticate")后点击他只是将用户重定向到Authenticate方法。在链接中你应该生成按钮,提交你的表格。所以你的视图代码应该是这样的

@model RDB.DataModel.tblRDBUser
@{
    ViewBag.Title = "Index";
}
@using (Html.BeginForm("Authenticate"))
{
   @Html.TextBoxFor(a => a.UserName)
   @Html.TextBoxFor(a => a.Password)

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

}

此外,您的控制器看起来很奇怪,可能是因为这是代码简化的结果,但至少应该在模​​型无效时进行下一次更改(return View("Index");):

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using RDB.DataModel;
using RDB.Models;

namespace CignaRDB.Controllers
{
public class RDBWebController : Controller
{
    //
    // GET: /RDBWeb/
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Authenticate(tblRDBUser User)
    {
        if (ModelState.IsValid)
        {
            Authenticate user = new Authenticate();
            user.AuthenticateUser(User);
            return View();
        }
        return View("Index");//because view name and Action method not match
    }
}
}