0

私は初心者であり、ほとんど自分で理解しているので、これは非常に簡単な質問です。データベース内の情報に対して認証を行っており、行のデータをビューに表示したいだけです。行のデータを持つコントローラーに変数を作成し、その変数をビューに呼び出して、画面に行情報を表示できるようにする方法が本当にわかりません。

皆さん、ありがとうございます。

私のモデル:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace Mybasicvalidator.Models
{
public class Class1
    {
    [Required]
    public int id { get; set; }
    public string fname {get; set;}
    public string lname { get; set; }
    public string email { get; set; }
    public string username { get; set; }
    public string password { get; set; }
    }
}

私のコントローラー:

using Mybasicvalidator.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
namespace Mybasicvalidator.Controllers
{
public class homeController : Controller
{
    //
    // GET: /home/
    [HttpGet]
    public ActionResult Index()
    {
        return View();
        return Content("Login Page");
    }
    [HttpPost]
    public ActionResult Index(Class1 modelle)
    {
        if (ModelState.IsValid)
        {
            if (DataAccess.DAL.CheckUser(modelle.fname))

            {
            return RedirectToAction("Index", "profile");
            }

            {
                return Content("FAIL");
            }
        }
        return View();
    }
}
}

マイ データ アクセス層 (DAL):

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Web;


namespace Mybasicvalidator.DataAccess
{
    public class DAL
    {
    static SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString());

    public static bool CheckUser(string fname) 
    {
        bool authenticated = false;

        string query = string.Format("SELECT * FROM [tbl_user] WHERE fname = '{0}'", fname);

        SqlCommand cmd = new SqlCommand(query, conn);
        conn.Open();
        SqlDataReader sdr = cmd.ExecuteReader();
        authenticated = sdr.HasRows;

          conn.Close();
        return (authenticated);
    }

}
}

行を読み取り、自分の行に対して認証をチェックしていることはわかっているので、データ行をビューに表示するにはどうすればよいですか? 私はこれに非常に慣れておらず、1週間試してみました。そのため、従うことができるいくつかのコードに感謝します。

再度、感謝します

4

2 に答える 2

0

ViewModelを省略しています。

MVCアプリケーションの場合:

  • コントローラは正しいビューを選択し、ビューモデルを構築してから、それをビューに渡します。
  • ビューモデルには、ビューに表示される情報/データが含まれています。
  • ビューには、ViewModelからのデータを実際に表示するマークアップが含まれています。

コントローラ:

[HttpGet]
public ActionResult Index(int userId)
{
    return View(new UserViewModel(userId));
}

モデルの表示:

public class UserViewModel { 
   public UserViewModel(int userId) {
      UserToDisplay = UserRepository.GetUserById(userId);
   }

   public User UserToDisplay { get; set; }
}

意見:

@model UserViewModel;

Hello @model.UserToDisplay.FirstName!
于 2013-01-17T21:45:37.643 に答える
0

DAL メソッドがモデルを返すようにすることができます。

public class DAL
{
    public static Class1 GetUser(string fname) 
    {
        var connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString();
        using (var conn = new SqlConnection(connectionString))
        using (var cmd = conn.CreateCommand())
        {
            conn.Open();
            cmd.CommandText = "SELECT * FROM [tbl_user] WHERE fname = @fname";
            cmd.Parameters.AddWithValue("@fname", fname);
            using (var reader = cmd.ExecuteReader())
            {
                if (!reader.Read())
                {
                    return null;
                }

                var user = new Class1();
                user.id = reader.ReadInt32(reader.GetOrdinal("id"));
                user.fname = reader.ReadString(reader.GetOrdinal("fname"));
                ... and so on for the other properties
                return user;
            }
        }
    }
}

コードが脆弱な SQL インジェクションを回避するために、パラメーター化されたクエリを使用した方法に注目してください。

そして、リダイレクトする前に成功した場合、フォーム認証 Cookie を発行できる認証を実行しているコントローラー アクション:

[HttpPost]
public ActionResult Index(Class1 modelle)
{
    if (ModelState.IsValid)
    {
        var user = DataAccess.DAL.GetUser(modelle.fname);
        if (user != null)
        {
            FormsAuthentication.SetAuthCookie(modelle.fname, false);
            return RedirectToAction("Index", "profile");
        }
        return Content("FAIL");
    }
    return View(modelle);
}

[Authorize]認証されたユーザーのみがアクセスできるため、ターゲットコントローラーアクションで属性を装飾できます。

public class ProfileController: Controller
{
    [Authorize]
    public ActionResult Index()
    {
        var user = DataAccess.DAL.GetUser(User.Identity.Name);
        return View(user);
    }
}

最後に、対応するビューで:

@model Class1
<div>
    Hello @Html.DisplayFor(x => x.fname)
</div>
于 2013-01-17T21:46:23.617 に答える