ArgumentException во время выполнения - PullRequest
0 голосов
/ 30 апреля 2018

Это исключение, которое я получаю:

Словарь параметров содержит пустую запись для параметра 'birthDate' необнуляемого типа 'System.DateTime' для метода 'System.Web.Mvc.ActionResult AddMember (System.String, System.String, System. DateTime, Int32, System.String) 'в' AuthSys.Controllers.MemberController '. Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр. Параметернавн: параметры

Мой взгляд выглядит так:

<div class="col-md-offset-2 col-md-10">                
    <br />
    @Html.LabelFor(model => model.FirstName)
    @Html.TextBoxFor(model => model.FirstName, new { maxlength = "50", size = "50", @class = "AddMemberControls" })
    <br /><br />
    @Html.LabelFor(model => model.LastName)
    @Html.TextBoxFor(model => model.LastName, new { maxlength = "50", size = "50", @class = "AddMemberControls" })
    <br /><br />
    @Html.LabelFor(model => model.BirthDate)
    @Html.TextBoxFor(model => model.BirthDate, new { size = "50", @type = "date", @class = "AddMemberControls" })
    <br /><br />
    @Html.LabelFor(model => model.Age)
    @Html.TextBoxFor(model => model.Age, new { maxlength = "3", size = "50", @class = "AddMemberControls" })
    <br /><br />
    @Html.LabelFor(model => model.SportType)
    @Html.TextBoxFor(model => model.SportType, new { maxlength = "50", size = "50", @class = "AddMemberControls" })
    <br /><br />
    <input type="submit" value="Opret" class="btn btn-default" />
</div> 

Мой контроллер:

public ActionResult AddMember(string fName, string lName, DateTime birthDate, int age, string sportType)
{
    var member = new Member() { FirstName = fName, LastName = lName, Age = age, SportType = sportType, BirthDate = birthDate};
    coloContext.Members.Add(member);
    coloContext.SaveChanges();         
    return View(member);
}

И модель представления

public class MemberViewModel
{
    public string FirstName { get; set; }       
    public string LastName { get; set; }        
    public DateTime BirthDate { get; set; }                       
    public DateTime CreationDate { get; set; }        
    public int Age { get; set; }        
    public string SportType { get; set; }
}

Ошибка возникает, когда я пытаюсь запустить свое приложение. При поиске этой ошибки в интернете все они указывают на маршрутизацию, что смущает меня еще больше. Я не до конца понимаю сообщение об ошибке. Похоже, что это говорит о том, что Date является нулевым значением, но в представлении пользователь будет предоставлять параметр date. Может кто-нибудь объяснить, в чем моя проблема? Большое спасибо.

В случае необходимости моя маршрутизация выглядит следующим образом:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Member", action = "AddMember", id = UrlParameter.Optional }
);

--------------------- обновление ------------------------

Извините, я не думал, что полный код представления был необходим. Вот полный код

    @model AuthSys.ViewModels.MemberViewModel

@{
    ViewBag.Title = "Medlem";
}

<h2>Member</h2>

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <div class="imageComponent">
            <div class="memberPhoto">
                <p>Billed mangler</p>
                <br />
            </div>
            <input type="button" value="Tag et billed" style="float:right; margin-right: 20px;" />
        </div>
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">                
                <br />
                @Html.LabelFor(model => model.FirstName)
                @Html.TextBoxFor(model => model.FirstName, new { maxlength = "50", size = "50", @class = "AddMemberControls" })
                <br /><br />
                @Html.LabelFor(model => model.LastName)
                @Html.TextBoxFor(model => model.LastName, new { maxlength = "50", size = "50", @class = "AddMemberControls" })
                <br /><br />
                @Html.LabelFor(model => model.BirthDate)
                @Html.TextBoxFor(model => model.BirthDate, new { size = "50", @type = "date", @class = "AddMemberControls" })
                <br /><br />
                @Html.LabelFor(model => model.Age)
                @Html.TextBoxFor(model => model.Age, new { maxlength = "3", size = "50", @class = "AddMemberControls" })
                <br /><br />
                @Html.LabelFor(model => model.SportType)
                @Html.TextBoxFor(model => model.SportType, new { maxlength = "50", size = "50", @class = "AddMemberControls" })
                <br /><br />
                <input type="submit" value="Opret" class="btn btn-default" />
            </div>            
        </div>
    </div>
}

<div>
    @Html.ActionLink("Registrerede medlemmer", "RegisteredMembers")    
</div>

1 Ответ

0 голосов
/ 30 апреля 2018

Кажется, что ваш код не заключен в форму. Таким образом, при отправке запроса привязка формы не выполняется для параметров.

Решение - Оберните код внутри формы. Смотрите код ниже.

@using (Html.BeginForm("AddMember", "<<ControllerName>>", new { }, FormMethod.Post))
{
    <div class="col-md-offset-2 col-md-10">                
                <br />
                @Html.LabelFor(model => model.FirstName)
                @Html.TextBoxFor(model => model.FirstName, new { maxlength = "50", size = "50", @class = "AddMemberControls" })
                <br /><br />
                @Html.LabelFor(model => model.LastName)
                @Html.TextBoxFor(model => model.LastName, new { maxlength = "50", size = "50", @class = "AddMemberControls" })
                <br /><br />
                @Html.LabelFor(model => model.BirthDate)
                @Html.TextBoxFor(model => model.BirthDate, new { size = "50", @type = "date", @class = "AddMemberControls" })
                <br /><br />
                @Html.LabelFor(model => model.Age)
                @Html.TextBoxFor(model => model.Age, new { maxlength = "3", size = "50", @class = "AddMemberControls" })
                <br /><br />
                @Html.LabelFor(model => model.SportType)
                @Html.TextBoxFor(model => model.SportType, new { maxlength = "50", size = "50", @class = "AddMemberControls" })
                <br /><br />
                <input type="submit" value="Opret" class="btn btn-default" />
            </div> 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...