将输入类型连接到模型并在asp net中为它们分配一个值[重复]

Posted

技术标签:

【中文标题】将输入类型连接到模型并在asp net中为它们分配一个值[重复]【英文标题】:connect input type to model and assign them a value in asp net [duplicate] 【发布时间】:2021-10-09 11:45:13 【问题描述】:

我正在尝试将值添加到交叉表中,其中车库的 ID 和基于选择列表的值被插入到数据库中。该列表在视图中如下所示:

 <div class='form-group' style="margin-left: 60%;">
                <div class="row">
                    <label class="ab">Claim</label>
                    <input type="checkbox" class="checkbclass" name="Claim" id="Claim" placeholder="Claim" required="" />
                </div>
            </div>
            <div class='form-group' style="margin-left: 60%;">
                <div class="row">
                    <label class="ab">Scheduled Service</label>
                    <input type="checkbox" class="checkbclass" name="Scheduled" id="Scheduled" placeholder="Scheduled" required="" />
                </div>
            </div>
            <div class='form-group' style="margin-left: 60%;">
                <div class="row">
                    <label class="ab">Tires</label>
                    <input type="checkbox" class="checkbclass" name="Tires" id="Tires" placeholder="Tires" required="" />
                </div>
            </div>

因此视图中显示了 3 个复选框。在这里,用户应该在编辑车库时选择一个或多个选项。交叉表如下所示:

   [ID]
  ,[GarageID]
  ,[RequestProperty]
  ,[CreatedDate]
  ,[CreatedBy]
  ,[UpdatedDate]
  ,[UpdatedBy]

我想在 SQL 存储过程中做类似的事情:

INSERT INTO GarageCrossRequestType
(GarageID, RequestProperty)
VALUES (@GarageID, @RequestType)

这可能类似于:

var cmd1 = new SqlCommand("spGarageGetRequestTypes", Connection);
                    cmd1.CommandType = CommandType.StoredProcedure;
                    cmd1.Parameters.AddWithValue("@GarageId", model.GarageId);
                    cmd1.Parameters.AddWithValue("@RequestType", model.requestId);

                    int result = cmd1.ExecuteNonQuery();
                    if (result == 1)
                    valid = true;

在方法中。 (插入garageIDRequestTypeID。)

请求类型可以如下:

        public int Claim  get; set;  = 1;
        public int ScheduledService  get; set;  = 2;
        public int Tires  get; set;  = 3;

例如,如果用户选择声明,我想用GarageIDClaim 更新表格 -> 其中ID 将是1。我对使用视图有点陌生,所以我不确定如何将输入类型连接到模型。所以问题如下:

    将输入类型连接到模型,为其提供正确的值(例如,Claim -> 1、Scheduled -> 2 等等),并且, 我的数据库表只接受garageIdrequestType,因此在发送例如garageId: 4 时,我需要输入类型Claim 或选择任何复选框来仅发送它们的值(1、2 或3)到数据库。

有人对此有解决方案吗?我也希望这是有道理的,否则请告诉我,我会尝试以不同的方式表述它。

更新: 所以我应该从一开始就解释得更好。但这是其余的代码。所以基本上,有一个功能,用户可以编辑车库,我想让他们也可以选择索赔/服务或轮胎。所以我想扩展这个方法,当用户选择一个车库时,他们也可以选择索赔等等(garageId也来自这个方法)。

在视图中(用于编辑车库):

<div class="form-group">
                <div class="row">
                    <label class="col-xs-2 control-label">Garage</label>
                    <input type="text" class="col-lg-10 form-control" name="GarageName" id="GarageName" placeholder="Name" required="" />
                </div>
            </div>
            <div class="form-group">
                <div class="row">
                    <label class="col-xs-2 control-label">Contact person</label>
                    <input type="text" class="col-lg-10 form-control" name="ContactPerson" id="ContactPerson" placeholder="ContactPerson" required="" />
                </div>
            </div>
            <div class="form-group">
                <div class="row">
                    <label class="col-xs-2 control-label">Email</label>
                    <input type="email" class="col-lg-10 form-control" name="Email" id="Email" placeholder="Email" required="" onblur="validateEmail(this.value);" /><p id="InvalidMeg" style="font-size: 25px; color: red">Invalid e-mail address</p>
                </div>
            </div>

            <button class="btn btn-md btn-primary custom" type="submit" id="saveNewGarageBtn"><i class="glyphicon glyphicon-lock"></i>&nbsp;Save</button>
            <button class="btn btn-md btn-primary custom" type="submit" id="EditGarageBtn"><i class="glyphicon glyphicon-lock"></i>&nbsp;Save edit</button>

javascript

function editGarage(e) 
            e.preventDefault();
            var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
            var garageId = dataItem.GarageId;
            countryId = dataItem.CountryId;
            name = dataItem.Name;
            var contactperson = dataItem.ContactPerson;
            var email = dataItem.Email;
            if (garageId != 0) 
                $("#EditGarageBtn").show();
                $("#saveNewGarageBtn").hide();
                $("#GarageName").val(name);
                $("#Country").val(countryId);
                $("#ContactPerson").val(contactperson);
                $("#Email").val(email);
                $("#garageId").val(garageId);
            
        

Edit-garage button:
  $("#EditGarageBtn").click(function () 
            var customerNumber = customerNumberOfEditingGarage;

            name = $("#GarageName").val();
            countryId = $("#Country").val();
            var garageId = $("#garageId").val();
            var contactperson = $("#ContactPerson").val();
            var email = $("#Email").val();

            $("#EditGarageBtn").hide();

            if (countryId == "Norway")
                countryId = 2;
            if (countryId == "Finland")
                countryId = 4;
            
            if (name.length > 0 && email.length > 0 && phone.length > 0 && contactperson.length > 0) 
            $.ajax(
                url: '@Url.Action("EditGarage", "Garage")',
                dataType: 'JSON',
                data: 
                    name: name, countryId: countryId, garageId: garageId,
                    contactperson: contactperson,
                    phone: phone, email: email
                ,
                success: function (data) 
                    if (data == "Failure") 
                        toastr["error"]("Error editing Garage");
                    
                    else 
                        toastr["success"]("Garage successfully updated");
                        customerNumberOfEditingGarage = null;
                        refreshGrid();
                    
                ,
                error: function () 

                
            );
             else 
                toastr["error"]("Error editing Garage");
            
        );

方法:

public bool EditGarage(GarageModel model)
        
            var valid = false;

            var cmd = new SqlCommand("spGarageEditGarage", Connection);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@GarageId", model.GarageId);
            cmd.Parameters.AddWithValue("@CountryId", model.CountryId);
            cmd.Parameters.AddWithValue("@ContactPerson", model.ContactPerson);
            cmd.Parameters.AddWithValue("@Email", model.Email);
            try
            

                int result = cmd.ExecuteNonQuery();
                if (result == 1)
                    valid = true;
            

            catch (SqlException ex)
            
                throw new Exception(ex.Message);

            
            finally
            
                Connection.Close();
            
            return valid;
        

希望这变得更清楚了。

【问题讨论】:

【参考方案1】:

我不知道你的模型是什么以及model.GarageId 来自哪里。如果你完成了我没看懂的部分,可以使用model.requestId下面的代码。

注意:使用radiobutton 而不是checkbox

将视图更改为:

@using (html.BeginForm("YourAction", "YourController", FormMethod.Post)) 

 <div class='form-group' style="margin-left: 60%;">
  <div class="row">
    <input type="radio" id="Claim" name="requestType" value="Claim">
    <label for="Claim">Claim</label>
    < </div>
  </div>
  <div class='form-group' style="margin-left: 60%;">
    <div class="row">
      <input type="radio" id="ScheduledService" name="requestType" value="ScheduledService">
      <label for="ScheduledService">ScheduledService</label>
    </div>
  </div>
  <div class='form-group' style="margin-left: 60%;">
    <div class="row">
      <input type="radio" id="Tires" name="requestType" value="Tires">
      <label for="Tires">Tires</label>
    </div>
  </div>
  <div class='form-group' style="margin-left: 60%;">
    <div class="row">
     <input type="submit" value="Submit"/>
    </div>
  </div>
 </div>

添加枚举

 public enum RequestType
 
    Claim = 1,
    ScheduledService = 2,
    Tires = 3
 

在你的行动中

public ActionResult YourAction(RequestType requestType)

    //......................................
    model.GarageId = //your value
    switch (requestType)
    
        case RequestType.Claim:
          model.requestId = (int)RequestType.Claim;
          break;
        case RequestType.ScheduledService:
          model.requestId = (int)RequestType.ScheduledService;
          break;
       case RequestType.Tires:
          model.requestId = (int)RequestType.Tires;
          break;
    

    //get insert........................

【讨论】:

如果您想了解有关代码的更多信息,我已经发布了更新!但是谢谢你,我会试试这个

以上是关于将输入类型连接到模型并在asp net中为它们分配一个值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 asp.net core 3.1 中为每种类型的请求启用 Cors

将 asp.net web 表单连接到 ms access 数据库

无法使用 AFNetworking 将 iOS 连接到 asp.net webservices

显示列表并在列表中添加新项目 asp.net core

将 GeoDB 连接到 ASP.Net Web 应用程序

在 asp.net 中调用 Web 服务