Я хочу отображать строковый тип как флажок в представлении MVC, но возвращает его как строковый тип в сообщении HTTP. Проблема в том, что он возвращает false в HTTP Post. Ниже мой код:

Посмотреть:

  @model List<Car>

        foreach(var car in Model){
       bool isFourWheel = false;
        if(bool.TryParse(car.IsFourWheel, out isFourWheel){
        @Html.CheckBox("IsFourWheel", isFourWheel); //need to be rendered as checkbox, but returns string type on HTTP POST
    }
     }

Модель:

public class Car
    {
        public string IsFourWheel { get; set; } //bad naming, but it can contain any type, include boolean
    }

Контроллер:

 public ActionResult Index()
        {


            var cars = new List<Car>(){ new Car(){IsFourWheel = "true"},new Car(){IsFourWheel = "false"} };
            return View(cars);
        }

        [HttpPost]
        public ActionResult Index(List<Car> cars)  **Problem IsFourWheel is false when true is selected **
        {           
            return View(cars);
        }

Мы очень ценим любой идеал.

2
Pingpong 26 Авг 2011 в 14:49

2 ответа

Вы можете изменить свою модель просмотра следующим образом:

public class Car
    {
        public string IsFourWheel { get; set; }
        public bool IsFourWheelBool { get { return bool.Parse(IsFourWheel); } }
    }

Ваш взгляд будет выглядеть так:

@Html.EditFor(x => x.IsFourWheelBool);
1
Robin van der Knaap 26 Авг 2011 в 11:53

Думаю, будет проще, если вы добавите Id в свою модель. Именно так
Модель:

public class Car
{
    public int CarID { get; set; }
    public string IsFourWheel { get; set; }        
}


Просмотр:

@model IEnumerable<Car>
foreach (var car in Model)
{
    if(car.IsFourWheel == "true"){
        <input type="checkbox" name="carID" value="@car.CarID" checked="checked" />
    }
    else
    {
        <input type="checkbox" name="carID" value="@car.CarID" />
    }
}

Контроллер:

[HttpPost]
public ActionResult Index(List<int> carID)
{
    //handle selected cars here
    return View();
}
1
dohaivu 26 Авг 2011 в 15:22