-4

我正在做一个项目,但我不习惯 C#。我试图在我的旧工作代码之后工作。我找不到任何区别。

我的html表单:

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    @Html.HiddenFor(model => model.TicketID)
    <fieldset>
        <legend>Ticketdetail</legend>

          <div class="editor-label">
            @Html.LabelFor(model => model.Anmerkung)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Anmerkung)
            @Html.ValidationMessageFor(model => model.Anmerkung)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

行动:

public ActionResult CreateDetail(int id)
{
    if (id == -1) return Index(-1);
    return View(new cTicketDetail(id, User.Identity.Name));
}

[HttpPost]
public ActionResult CreateDetail(cTicketDetail collection)
{


    //int TicketID = collection.TicketID;
    try
    {
        if (ModelState.IsValid)
        {
            collection.Write();
        }
        return RedirectToAction("Details", collection.TicketID);
    }
    catch
    {
        return this.CreateDetail(collection.TicketID);
    }
}

提交我的表单后的错误

4

1 回答 1

1

看起来cTicketDetail您在CreateDetail操作中使用的类型没有无参数构造函数。控制器操作不能将此类类型作为参数,因为默认模型绑定器不知道如何实例化它们。

这里的最佳实践是定义一个视图模型,然后让您的控制器操作将此视图模型作为参数,而不是使用您的域实体。

如果您不想使用视图模型,则必须修改您的cTicketDetail类型,使其具有默认构造函数:

public class cTicketDetail
{
    // The default parameterless constructor is required if you want
    // to use this type as an action argument
    public cTicketDetail()
    {
    }

    public cTicketDetail(int id, string username)
    {
        this.Id = id;
        this.UserName = username;
    }

    public int Id { get; set; }
    public string UserName { get; set; }
}
于 2012-12-29T10:59:09.477 回答