В представлении MVC, когда форма размещена, запрос содержит значения формы, в то время как все поля модели равны 0 - PullRequest
0 голосов
/ 05 марта 2012

Использование Visual Studio 2010, проект MVC Когда моя форма отправляется (в настоящее время с помощью javascript, но с теми же результатами, что и кнопка отправки), действие получает пустую модель с обоими полями, равными нулю, вместо того, чтобы содержать значение, которое я ввел в текстовое поле. Объект Request содержит правильную пару имя / значение в коллекции Form.

Значения модели, идущие в другую сторону, работают нормально - поэтому, основываясь на моем действии [HttpGet] CallDisplayHome (), форма загружается со значением текстового поля, равным 1.

Если кто-нибудь знает, почему он не будет работать, возвращаясь через POST, я был бы признателен.

Используемая модель:

namespace TCSWeb.Models
{
    public class CallDisplayModel
    {
        public int SelectedRowIndex;
        public int SelectedLineID;
    }
}

Вид:

@model TCSWeb.Models.CallDisplayModel

@{
Layout = null;
}

<!DOCTYPE html>

<html>
<body>
/*
There a Jscript datatable here and a bunch of scripts for working with it in the header     I am skipping because I am hoping they are not relevant
*/

    <div>
    @using (Html.BeginForm("Testing", "CallDisplay", FormMethod.Post, new { name = "submitSelLine" }))
    {
        @Html.TextBoxFor(m => m.SelectedLineID)    
        <p>
            <input type="submit" value="Log On" />
        </p>        
    }    
    </div>    
    <button onclick="SubmitSelCallRecord()">@LangRes.Strings.calldisplay_opencallrecord</button>

Действия моего контроллера:

    [HttpGet]
    public ActionResult CallDisplayHome()
    {
        TCSWeb.Models.CallDisplayModel temper = new CallDisplayModel();
        temper.SelectedLineID = 1;
        temper.SelectedRowIndex = 1;
        return View(temper);
    }

[HttpPost]
public ActionResult Testing(TCSWeb.Models.CallDisplayModel cdmodel)
{
    return RedirectToAction("CallDisplayHome"); //breaking here, cmodel has zero for selectedlineid
}

1 Ответ

1 голос
/ 06 марта 2012

Вам необходимо объявить переменные CallDisplayModel как свойства:

public int SelectedRowIndex { get; set; }

[Required]
public int SelectedLineID { get; set; }

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

Измените свой метод публикации следующим образом:

[HttpPost]
public ActionResult Testing(TCSWeb.Models.CallDisplayModel temper)
{
    //check if valid
    if(ModelState.IsValid)
    {
        //success!
        return RedirectToAction("CallDisplayHome"); 
    }
    //update error! redisplay form
    return View("CallDisplayHome", temper);

}

И отображать ошибки в вашем представлении так:

@Html.ValidationMessageFor(m => m.SelectedLineID)
@Html.TextBoxFor(m => m.SelectedLineID) 

Я не уверен, что делает ваша кнопка submitSelCallRecord, так как она ссылается на опущенный javascript.

...