【发布时间】:2018-07-12 15:56:20
【问题描述】:
我有下一列的表格
Id,Name,A_Status,BranchName.
使用我在下面描述的下一个方法是否会很容易实现? 列分支有 25 个不同的名称。所以,我想创建一个页面,有 25 个分支标题(并且为每个分支创建自己的 cshtml 页面),用户可以在其中输入和查看他选择的特定分支的数据。在每个页面的特定权限上,并非所有用户都可以输入和查看它们。 我决定用下一个代码来实现它。
我的控制器
public ActionResult A_Branch ()
{
string query = "SELECT BranchName,Name, MAX(A_STATUS) AS A_Status "
+ "FROM Students "
+ "WHERE BranchName= '1_Branch' "
+ "GROUP BY BranchName,Name";
IEnumerable<EnrollmentStudentGroup> data = db.Database.SqlQuery<EnrollmentStudentGroup>(query);
return View(data.ToList());
}
下一个 actionresult 我将创建 23 倍。
public ActionResult B_Branch ()
{
string query = "SELECT BranchName,Name, MAX(A_STATUS) AS A_Status "
+ "FROM Students "
+ "WHERE BranchName= '2_Branch' "
+ "GROUP BY BranchName,Name";
IEnumerable<EnrollmentStudentGroup> data = db.Database.SqlQuery<EnrollmentStudentGroup>(query);
return View(data.ToList());
}
我的 2 个模型;
public class Student : BaseEntity
{
public int Id { get; set; }
public string BranchName { get; set; }
public string Name { get; set; }
public int A_Status { get; set; }
}
public class EnrollmentStudentGroup
{
public string BranchName { get; set; }
public string Name { get; set; }
public int A_Status { get; set; }
public IEnumerable<EnrollmentStudentGroup> StudentCollection { get; set; }
}
和我的模特
public class Model
{
public List<Student> Students { get; set; }
public List<EnrollmentStudentGroup> EnrollmentStudentGroup { get; set; }
}
我最新的控制器(在“.select”之后他给了我错误)
[HttpGet]
public ActionResult TestNew(string branchname)
{
// check stuff like permissions
var db = new MovieContext();
var model = new Model();
var students = db.Student
.Where(x => x.BranchName == branchname)
.GroupBy(x => new { x.BranchName, x.Name, x.Currency, x.NoCart, x.NoAccount })
.Select(x => new
{
BranchName = x.FirstOrDefault().BranchName,
Name = x.FirstOrDefault().Name,
A_Status = x.Max(p => p.A_Status),
Currency = x.FirstOrDefault().Currency,
NoCart = x.FirstOrDefault().NoCart,
NoAccount = x.FirstOrDefault().NoAccount
}).ToList();
foreach (var item in students)
{
model.Students.Add(new Student
{
A_Status = item.A_Status,
BranchName = item.BranchName,
Name = item.Name,
NoAccount = item.NoAccount,
NoCart = item.NoCart,
Currency = item.Currency
});
}
return View(model);
}
现在这个错误,我根据你的回答更新了我的模型和视图(cshtml)。
我的观点(cshtml)
@model Tessa.Models.Model
@{
ViewBag.Title = "BranchView";
}
<h2>BranchView</h2>
@foreach (var item in Model.Students)
{
<p>@item.Name</p>
<p>@item.A_Status</p>
<p>@item.BranchName</p>
<p>@item.NoAccount</p>
<p>@item.NoCart</p>
<p>@item.Currency</p>
}
【问题讨论】:
-
疯了!甚至不要考虑它。您有一个方法并向其传递一个参数以指示您要返回哪些数据。并且你可以检查当前用户有什么权限来决定应该显示什么
-
如果用户可以选择分支名称,则将分支名称作为参数(也许用户可以通过下拉列表选择?)提供给您的操作方法,然后将该值作为参数提供给您的操作方法询问。然后您每次都使用相同的视图和操作方法来获取数据。拥有 25 种几乎相同的方法是疯狂的,并且错过了编程的基本要点之一——即接受和使用用户输入来更改代码的行为。除此之外,如果有人将另一个分支添加到表中,您不想编写更多代码来访问它,那真是太疯狂了。
-
@ADyson 你好,我在下面的回答中实现了方法,现在我的步骤是授予一个用户查看权限,例如名称为“Branch_1”的分支(localhost/students/Test01/Branch_1)对?
-
@whitefang 如果您有新问题,请提出新问题。评论不是讨论要添加到代码中的新功能的地方。问一个新问题,展示你到目前为止所做的事情以及你正面临的问题。谢谢。
标签: c# asp.net asp.net-mvc-5