0

私はasp.netが初めてで、誰かが私を助けることができれば非常に感謝しています..私は私の見解にフォームを持っています:

@using (Html.BeginForm("Edit", "Projects", FormMethod.Post, new { enctype = "multipart/form-data", id = serviceId })) 
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Project</legend>

            @Html.LabelFor(model => model.Title)     
            @Html.EditorFor(model => model.Title)
            @Html.ValidationMessageFor(model => model.Title)       

            @Html.LabelFor(model => model.Description)

            @Html.TextAreaFor(model => model.Description, new { rows = 20})
            @Html.ValidationMessageFor(model => model.Description)

            <input type="submit" value="Save"  />

</fieldset>
}

serviceId私は(コントローラで宣言されている)ViewDataを通過します:

@{
    var serviceId = ViewData["serviceid"];
 }

送信時に、これserviceIdを自分に渡し、ActionResultこのビュー内にスクリプトを追加したい:

  $(function () {
    $("form").submit(function () {

        $.post("Projects/Edit", {Sid: $(this).attr('id'), }, function (data) {

        });
    });
});

私のProjectsコントローラーでは、EditActionResult 内で、このIDをパラメーターとして取得します。

[HttpPost]
    public ActionResult Edit(Models.Project EditedProject, int Sid)
    {
        Models.DBProjects dbproject = new Models.DBProjects();
        PoleInvestProjectContext context = new PoleInvestProjectContext();
        UserAccount curUser = context.Users.Where(u => u.UserName ==    User.Identity.Name).First();
        EditedProject.UserId = curUser.UserId;

        EditedProject.ServiceId = Sid;
        dbproject.EditProject(EditedProject);

        return RedirectToAction("Index", new { id = Sid });
    }

ここにError:(フォームを送信しようとすると:

The parameters dictionary contains a null entry for parameter 'Sid' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Edit(MyProject.Models.Project, Int32)' in 'MyProject.Controllers.ProjectsController'. 
An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.

誰かが助けてくれたらとてもありがたいです!前もって感謝します!

4

1 に答える 1

1

ビューモデルを使用し、javascript と ViewData を捨てる

public class EditViewModel()
{
  public string Title {get; set;}
  public string Description {get; set;}
  public int ServiceId {get; set;}
}

コントローラーの ViewData オブジェクトではなく、viewModel プロパティに ServiceId を設定します。

エンティティ オブジェクトではなく、viewModel に対してビューを強く型付けします。

次に、非表示フィールドを使用して値をコントローラーに戻します

@Html.LabelFor(model => model.Title)     
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)       
@Html.LabelFor(model => model.Description)
@Html.TextAreaFor(model => model.Description, new { rows = 20})
@Html.ValidationMessageFor(model => model.Description)

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

<input type="submit" value="Save"  />

投稿アクションの署名を変更します

[HttpPost]
public ActionResult Edit(EditViewModel viewModel)
{
  //...
于 2013-03-14T18:49:25.587 に答える