Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将id属性传递给控制器';在ASP.NET MVC项目中的作用?_C#_Asp.net_Asp.net Mvc_Web Applications - Fatal编程技术网

C# 如何将id属性传递给控制器';在ASP.NET MVC项目中的作用?

C# 如何将id属性传递给控制器';在ASP.NET MVC项目中的作用?,c#,asp.net,asp.net-mvc,web-applications,C#,Asp.net,Asp.net Mvc,Web Applications,我是asp.net新手,如果有人能帮助我,我将不胜感激。。 我认为有一种形式: @using (Html.BeginForm("Edit", "Projects", FormMethod.Post, new { enctype = "multipart/form-data", id = serviceId })) { @Html.ValidationSummary(true) <fieldset> <legend>Project</

我是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
传递给我的
ActionResult
,并在该视图中添加脚本:

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

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

        });
    });
});
在我的
Projects
controller中,在
Edit
ActionResult中,我得到这个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 });
    }
这里有一个
错误
:(当我尝试提交表单时:

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.
如果有人能帮助我,我将非常感激!
提前感谢!

使用视图模型,放弃javascript和ViewData

public class EditViewModel()
{
  public string Title {get; set;}
  public string Description {get; set;}
  public int ServiceId {get; set;}
}
将ServiceId设置为viewModel属性,而不是ViewData 对象在控制器中

强烈地将视图键入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"  />

你必须从JavaScript发帖吗?非常感谢!看起来很简单!所以,每次我需要传递一些Id时,我都需要使用隐藏字段?很高兴能提供帮助。还有其他方法,但这是教科书上的“mvc方式”。每当问到“如何将x从视图传递到控制器”时,答案几乎总是“使用视图模型”
@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)
{
  //...