Передача значения типа Int через строку запроса - PullRequest
0 голосов
/ 01 марта 2019

Я могу успешно передать строковые значения, но у меня возникают проблемы с передачей целочисленного значения через строку запроса.

Если я передаю только строковые объекты, URL-адрес выглядит как

www.website.com/mypage?ProductName=TestName&MahName=TestName (правильно)

Однако, если я передам Id (int) вместе со строкой запроса, URL будет выглядеть так:

www.website.com/mypage/1?ProductName=TestName&MahName=TestName (неверно)

Однако я бы хотел, чтобы это было

www.website.com/mypage?Id=1&ProductName=TestName&MahName=TestName

Модель

using System.Data.SqlClient;
using System.ComponentModel.DataAnnotations;

namespace SecureMedi.Models
{
    public class CustomProductData
    {
        [Required]
        public int Id { get; set; }

        [StringLength(200)]
        public string ProductName { get; set; }

        [StringLength(100)]
        public string MahName { get; set; }

        public static CustomProductData FromSqlReader(SqlDataReader rdr)
        {
            return new CustomProductData
            {
                Id = (int)rdr["id"],
                ProductName = rdr["product_name"].ToString(),
                MahName = rdr["mah_name"].ToString()
            };
        }
    }
}

Контроллер

[HttpGet]
public ActionResult CustomProductData(int Id, string ProductName, string MahName) {
    var model = new CustomProductData() {
        Id = Id,
        ProductName = ProductName,
        MahName = MahName
    };

    return View(model);
}

[HttpPost]
public ActionResult CustomProductData(CustomProductData cp) {
    try {
        using(ISecureMediDatabase db = new SecureMediDatabase(this)) {
            CustomProductDataDAL cpd = new CustomProductDataDAL(db);
            cpd.Edit(cp);
            return RedirectToAction("LoadCustomProductData");
        }
    } catch (Exception ex) {
        ModelState.AddModelError("", ex.Message);
        return View(cp);
    }
}

DAL

public void Edit(CustomProductData cp) {
    try {
        string sql = "UPDATE table_name SET product_name = @ProductName, mah_name = @MahName WHERE id = @Id";

        if (cp.HasDetails()) {
            using(SqlCommand cmd = new SqlCommand(sql, conn)) {
                cmd.Parameters.Add(new SqlParameter("@Id", cp.Id));
                cmd.Parameters.Add(new SqlParameter("@ProductName", cp.ProductName));
                cmd.Parameters.Add(new SqlParameter("@MahName", cp.MahName));
                PrepareCommand(cmd);
                cmd.ExecuteNonQuery();
            }
        }
    } catch {
        closeConnection();
        throw;
    }
}

cshtml

Якорная ссылка для передачизапросить строковые значения на странице редактирования (которая принимает значения из QueryString)

<td class="text-secondary">@Html.ActionLink("Edit", "CustomProductData", "Home", new { Id = @item.Id, ProductName = @item.ProductName, MahName = @item.MahName }, new { @class = "text-info" })</td>

1 Ответ

0 голосов
/ 01 марта 2019

Очевидно, что имя переменной Id было занято в маршрутизации, и, следовательно, изменение имени переменной Id на RecordId решило проблему.

...