【发布时间】:2019-11-02 10:11:01
【问题描述】:
我正在开发 MVC 中的一个项目,但同时也合并了一个 ViewModel 层。我正在使用两个不同的数据表。第一个称为用户。那有很多不同的属性。第二个称为 UserProfile。里面只有用户名电子邮件和密码。这些表通过 UserNumber 字段链接到数据库中。
我有一个允许创建用户的视图以及将使用下拉菜单选择的有关商店定义、StoreOwnerDefinition、商店区域定义和商店类型定义的信息。如何从视图中的下拉列表中获取选择的信息到 SQL 数据库中。
这是我在控制器中的内容:
public ActionResult UserCreateNew()
{
DataTable dt = new DataTable();
// Open UserStoreDefinition table and create a List.
dt = new DataTable();
string constr =
string strSQL =
using (DataAccess da = new DataAccess(constr))
{
dt = da.GetDataTable(strSQL, CommandType.Text);
}
// Convert a DataTable to a list.
m.lstStoreDefinition = LinqExtensions.ToListof<UserStoreDefinition>(dt);
dt = new DataTable();
//strSQL = "StoreOwnerDefinitions";
strSQL = "SELECT distinct StoreOwnerName, StoreOwnerNumber FROM UserStoreDefinition"
+ " WHERE (UserStoreDefinition.UserNumber = " + m.UserNumber + ")"
+ " AND (UserStoreDefinition.StoreOwnerNumber <> -1)";
using (DataAccess da = new DataAccess(constr))
{
dt = da.GetDataTable(strSQL, CommandType.Text);
}
m.lstStoreOwnerDefinitions = LinqExtensions.ToListof<UserStoreDefinition>(dt);
dt = new DataTable();
//strSQL = "StoreRegionDefinitions";
using (DataAccess da = new DataAccess(constr))
{
dt = da.GetDataTable(strSQL, CommandType.Text);
}
m.lstStoreRegionDefinitions = LinqExtensions.ToListof<UserStoreDefinition>(dt);
dt = new DataTable();
//strSQL = "StoreTypeDefinitions";
strSQL = "SELECT distinct StoreTypeName, StoreTypeNumber FROM UserStoreDefinition"
+ " WHERE (UserStoreDefinition.UserNumber = " + m.UserNumber + ")"
+ " AND (UserStoreDefinition.StoreTypeNumber <> -1)";
using (DataAccess da = new DataAccess(constr))
{
dt = da.GetDataTable(strSQL, CommandType.Text);
}
m.lstStoreTypeDefinitions = LinqExtensions.ToListof<UserStoreDefinition>(dt);
# endregion
return View(m);
}
```
In my View Model I have:
```
and in the View I have:
```
<div class="spacerBody">
<h2 class="admin-home-link orange-titles orange-titles-large">@Html.ActionLink("Create Users", "AdminIndex")</h2>
<div class="to-link navlinks"> @Html.ActionLink("Users", "UserList") | @Html.ActionLink("Manage User Role", "RoleManageUser")</div>
<p> </p>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Registration Form</legend>
<ol class="comtrexBlue-text">
<li>
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName)
</li>
<li>
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password)
</li>
<li>
@Html.LabelFor(m => m.ConfirmPassword)
@Html.PasswordFor(m => m.ConfirmPassword)
</li>
<li>
@Html.LabelFor(m => m.Email)
@Html.TextBoxFor(m => m.Email)
</li>
</ol>
<button class="btn larger" type="submit">Create</button>
</fieldset>
}
<div class="form-group">
<div class="input-group-btn">
<div class="btn-group btn-group-justified" data-toggle="buttons">
<label class="btn btn-primary">
@Html.DropDownList
</label>
<label class="btn btn-primary">
@Html.DropDownList
</label>
<label class="btn btn-primary">
@Html.DropDownList
</label>
<label class="btn btn-primary">
@Html.DropDownList </label>
</div>
</div>
</div>
</div>
我想我的第一步是从视图中获取下拉信息。不是它不执行存储过程并传入参数。
【问题讨论】:
-
您确实需要参数化您的语句。你现在所拥有的只是一个大的注入问题。 Little Bobby Tables
-
@Larnu 我添加了一些我遗漏的东西。我会看一下这篇文章,但您还有其他建议吗?
-
您应该将控制器和操作传递给 Html.BeginForm() 以便您可以将表单数据发送回您的控制器 -> Html.BeginForm("UserCreateNew", "CONTROLLERNAMEHERE")
标签: c# asp.net sql-server model-view-controller