【问题标题】:Passing ViewModel - View to Controller When JavaScript disabled禁用 JavaScript 时将 ViewModel - View 传递给控制器
【发布时间】:2012-12-12 22:44:50
【问题描述】:

我很难在没有 JavaScript 的情况下开发功能..

我有一个 ViewModel:

public class AccountRegisterViewModel
{
    #region Properties
    public User User { get; set; }
    public ExternalAccounts ExtAccounts { get; set; }
    public LocalPassword Password { get; set; }
    public Company CompanyARegister { get; set; }
    public Company CompanyBRegister { get; set; }
    public bool SameCompanies { get; set; }
    public int NbCompanies { get; set; }
    ...
 }

在视图中,我有一个带有复选框的链接,用于复制第一家公司和第二家公司 但我不知道如何通过这个 viewModel(视图到控制器)来保存我的数据并返回与公司副本相同的视图..

我试试这个,在视图中:

    @Html.ActionLink("Click", "CopyCompanies","Account", new { model = Model })             
    @Html.CheckBoxFor(model => model.SameCompanies)

在控制器中:

    [AllowAnonymous]
    public ActionResult CopyCompanies(AccountRegisterViewModel model)
    {

        ...
        if (model.SameCompanies)
        {
           // copie
        }else //clear
        ...
        return View("Step2Register", model);
     }

有什么想法吗??谢谢你的帮助

【问题讨论】:

  • 你想做什么?
  • 没有 JavaScript 复选框只适用于表单。唯一可以在没有 JavaScript 的情况下做某事的是直接链接或表单,传递“修改”数据的唯一方法是表单。

标签: c# asp.net-mvc asp.net-mvc-4 viewmodel


【解决方案1】:

如果 CopyCompanies 操作方法需要 AccountRegisterViewModel 对象,那么您将需要提供它。很遗憾,您将无法使用创建链接时遵循的方法来提供价值。

您的两个选项是为 AccountRegisterViewModel 中的每个属性设置一个隐藏字段,然后让模型绑定创建对象,但即使这样也不理想,因为 viewModel 由复杂的对象组成,所以您有办法隐藏字段太多。

您的第二个选项,我认为是一种更好的方法,是传递某种与 AccountRegisterViewModel 相对应的 ID,CopyCompany 可以使用它来查找所需的值。

【讨论】:

    猜你喜欢
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多