Обновление, редактирование, удаление и импорт файла. javascript. в VisualStudio, используя ASP: NET MVC C# - PullRequest
1 голос
/ 20 марта 2020

Я новичок в кодировании. Меня попросили сделать приложение в VisualStudio, используя ASP. Net, MVC.

Я создал представление, в котором вы можете отобразить таблицу из базы данных. Теперь я должен иметь возможность Редактировать данные в другом представлении и в том же представлении.

Когда я создаю новое представление, у меня появляется эта ошибка при попытке запустить его:

Словарь параметров содержит пустую запись для параметра 'EmailId' ненулевого типа 'System.Int32' для метода 'System.Web. Mvc .ActionResult Edit (Int32, System.String, System.String, System.String, System.String) »в« MyMVCApplication.Controllers.EmailTemplateController ». Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр. Имя параметра: параметры

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

Это мой код:

Контроллер:

public ActionResult Edit (int EmailId, string userName, string title, string Email, string description)
{          
    UpdateDataBase(EmailId, userName, title, Email, description);
    return View("EmailData");
}

[HttpPost]
public ActionResult Edit(ModelTemplateEmail  EditEmailData)
{       
    if (ModelState.IsValid)
    {                
        return RedirectToAction("EmailData");
    };

    return View(EditEmailData);
}

просмотр:

@using (Html.BeginForm("Edit", "EmailTemplate", new { Id = Model.EmailData }, FormMethod.Post, null))
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>ModelTemplateEmail</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.EmailId, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.EmailId, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.EmailId, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.userName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.userName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.userName, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Title, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.description, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.description, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.description, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Url, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Url, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Url, "", new { @class = "text-danger" })
            </div>
        </div>

        @Html.HiddenFor(model => model.EmailData)

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "EmailData")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

1 Ответ

0 голосов
/ 23 марта 2020

@HtmlAction new { paramterName = должно соответствовать имени параметра в действии Action(int paramaterName - в этом случае EmailId

Словарь параметров содержит пустую запись для параметра 'EmailId' из необнуляемый тип

@Html.ActionLink("Edit", "EditData", new { id = item.EmailId }, null) 
                                           ^^

и

public ActionResult Edit(int EmailId, 
                             ^^^^^^^

Имя параметра EmailId, но ваш ActionLink использует id.

Если вы посмотрите на обработанный html (на клиенте), он создаст ссылку, такую ​​как ..Edit?id=123, но то, что вам нужно для вызова действия, - это ссылка, подобная ..Edit?EditId=123.

. измените свою подпись действия на

public ActionResult Edit(int id, 

или измените ActionLink на:

@Html.ActionLink("Edit", "EditData", new { EmailId = item.EmailId }, null) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...