【问题标题】:How can I create a new record of data and save it to the SQL database table如何创建新的数据记录并将其保存到 SQL 数据库表中
【发布时间】: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>&nbsp;</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


【解决方案1】:

您需要将表单发送回控制器,并传递表单数据:

1)在BeginForm中设置Action、Controller和Method

@Html.BeginForm("UserCreateNew", "CONTROLLERNAMEHERE", FormMethod.Post)

2) 修改 UserCreateNew 动作以将表单数据作为 UserCreateNewViewModel 接收

public ActionResult UserCreateNew(UserCreateNewViewModel userData)
        {

userData 然后应该将所有数据输入到您的表单中。

【讨论】:

    猜你喜欢
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    相关资源
    最近更新 更多