2014-10-03 95 views
0

我是一个MVC的新手,所以任何提示等都会走很长的路,只是试图传回用户当前的网址,但没有运气。正在使用的代码如下。MVC发送localPath到控制器

Controller  

public string AddMini(TodoMini todo) 
{ 
    return todo.URL; 
} 

View 

@using (Html.BeginForm("AddMini", "ToDo", FormMethod.Post)){ 
    <li> 
     @Html.HiddenFor(p => p.URL, Request.Url.LocalPath) 
     <div class="form-group"> 
      @Html.TextBoxFor(p => p.Description, new { @class = "form-control", @placeholder = "Add To-Do items", @autocomplete = "off" }) 
     </div> 
    </li> 
    <li> 
     <div class="form-group"> 
      <button type="submit" class="btn btn-primary">Submit</button> 
     </div> 
    </li> 
} 

希望这足以看出问题。

干杯家伙

+0

当您看到此视图时,HTML中有什么?什么被张贴到控制器? – CodeCaster 2014-10-03 14:17:20

+0

在HTML中隐藏的外观类似于。该帖子在运行调试时具有在控制器中设置的值,但该URL设置为NULL。 – 2014-10-03 14:30:01

回答

0

你为什么不从请求获取URL,而不是在模型中接受呢?

public string AddMini(TodoMini todo) 
{ 
    var url = HttpContext.Current.Request.Url; 
    //Rest of the POST logic 
} 
+0

这就是给我的“/ ToDo/AddMini”,它是响应的url而不是请求的url。它应该发送像“/财产/编辑/ 3”的希望,有道理 – 2014-10-03 14:49:01

+0

好的,我明白了。我认为GET和POST请求是对同一个URL进行的。 – 2014-10-03 14:51:33

+0

我正在通过部分 – 2014-10-03 14:53:27

0

使用

在我的控制器

 public ActionResult Index() 
    { 
     var todo = new TodoMini() {URL = Request.Url.LocalPath}; 
     return View(todo); 
    } 

,并考虑

@Html.HiddenFor(x=> x.URL) 

应该工作,确保正确的值分配给url属性,本地路径只能将就返回路径主机名。在我的情况下,它返回/主页/如果我将l ocalhost:3934 /家庭,如果只是locahhost:端口/然后返回“/”

如果你不想将Url添加到你的模型中,然后你应该创建一个ViewModel类,它应该包含你在视图中使用的所有属性。

+0

这样做更有意义,但它在一个不使用索引()的部分,这就是为什么我试图添加到隐藏。 – 2014-10-03 14:52:46

+0

请求对象应该在任何视图中可用。这是您使用的@ Html.HiddenFor方式的问题。 – RAJ 2014-10-03 14:56:47

+0

正如我添加到我的答案,您可以始终使用ViewModel特定的视图,并在控制器中填充,并传递该视图模型来查看。 – RAJ 2014-10-03 14:57:47

相关问题